// WRN editor extension source hash: b455291b3d69fabfba7d10889ff628f90579432d07cd871f9e39c336e6c8851f
// WRN editor extension generator hash: 456d1d614e44e5fb1f19b784176c09cf2ade9b64ef73a17934c2698150b62728
"use strict";
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);

// editors/vscode/node_modules/vscode-languageclient/lib/common/utils/is.js
var require_is = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.boolean = boolean;
  exports2.string = string;
  exports2.number = number;
  exports2.error = error;
  exports2.func = func;
  exports2.array = array;
  exports2.stringArray = stringArray;
  exports2.typedArray = typedArray;
  exports2.thenable = thenable;
  exports2.asPromise = asPromise;
  function boolean(value) {
    return value === true || value === false;
  }
  function string(value) {
    return typeof value === "string" || value instanceof String;
  }
  function number(value) {
    return typeof value === "number" || value instanceof Number;
  }
  function error(value) {
    return value instanceof Error;
  }
  function func(value) {
    return typeof value === "function";
  }
  function array(value) {
    return Array.isArray(value);
  }
  function stringArray(value) {
    return array(value) && value.every((elem) => string(elem));
  }
  function typedArray(value, check) {
    return Array.isArray(value) && value.every(check);
  }
  function thenable(value) {
    return value && func(value.then);
  }
  function asPromise(value) {
    if (value instanceof Promise) {
      return value;
    } else if (thenable(value)) {
      return new Promise((resolve, reject) => {
        value.then((resolved) => resolve(resolved), (error2) => reject(error2));
      });
    } else {
      return Promise.resolve(value);
    }
  }
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/is.js
var require_is2 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.boolean = boolean;
  exports2.string = string;
  exports2.number = number;
  exports2.error = error;
  exports2.func = func;
  exports2.array = array;
  exports2.stringArray = stringArray;
  function boolean(value) {
    return value === true || value === false;
  }
  function string(value) {
    return typeof value === "string" || value instanceof String;
  }
  function number(value) {
    return typeof value === "number" || value instanceof Number;
  }
  function error(value) {
    return value instanceof Error;
  }
  function func(value) {
    return typeof value === "function";
  }
  function array(value) {
    return Array.isArray(value);
  }
  function stringArray(value) {
    return array(value) && value.every((elem) => string(elem));
  }
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/messages.js
var require_messages = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.Message = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType = exports2.RequestType0 = exports2.AbstractMessageSignature = exports2.ParameterStructures = exports2.ResponseError = exports2.ErrorCodes = undefined;
  var is = __importStar(require_is2());
  var ErrorCodes;
  (function(ErrorCodes2) {
    ErrorCodes2.ParseError = -32700;
    ErrorCodes2.InvalidRequest = -32600;
    ErrorCodes2.MethodNotFound = -32601;
    ErrorCodes2.InvalidParams = -32602;
    ErrorCodes2.InternalError = -32603;
    ErrorCodes2.jsonrpcReservedErrorRangeStart = -32099;
    ErrorCodes2.serverErrorStart = -32099;
    ErrorCodes2.MessageWriteError = -32099;
    ErrorCodes2.MessageReadError = -32098;
    ErrorCodes2.PendingResponseRejected = -32097;
    ErrorCodes2.ConnectionInactive = -32096;
    ErrorCodes2.ServerNotInitialized = -32002;
    ErrorCodes2.UnknownErrorCode = -32001;
    ErrorCodes2.jsonrpcReservedErrorRangeEnd = -32000;
    ErrorCodes2.serverErrorEnd = -32000;
  })(ErrorCodes || (exports2.ErrorCodes = ErrorCodes = {}));

  class ResponseError extends Error {
    code;
    data;
    constructor(code, message, data) {
      super(message);
      this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
      this.data = data;
      Object.setPrototypeOf(this, ResponseError.prototype);
    }
    toJson() {
      const result = {
        code: this.code,
        message: this.message
      };
      if (this.data !== undefined) {
        result.data = this.data;
      }
      return result;
    }
  }
  exports2.ResponseError = ResponseError;

  class ParameterStructures {
    kind;
    static auto = new ParameterStructures("auto");
    static byPosition = new ParameterStructures("byPosition");
    static byName = new ParameterStructures("byName");
    constructor(kind) {
      this.kind = kind;
    }
    static is(value) {
      return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;
    }
    toString() {
      return this.kind;
    }
  }
  exports2.ParameterStructures = ParameterStructures;

  class AbstractMessageSignature {
    method;
    numberOfParams;
    constructor(method, numberOfParams) {
      this.method = method;
      this.numberOfParams = numberOfParams;
    }
    get parameterStructures() {
      return ParameterStructures.auto;
    }
  }
  exports2.AbstractMessageSignature = AbstractMessageSignature;

  class RequestType0 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 0);
    }
  }
  exports2.RequestType0 = RequestType0;

  class RequestType extends AbstractMessageSignature {
    _parameterStructures;
    _;
    constructor(method, _parameterStructures = ParameterStructures.auto) {
      super(method, 1);
      this._parameterStructures = _parameterStructures;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  exports2.RequestType = RequestType;

  class RequestType1 extends AbstractMessageSignature {
    _parameterStructures;
    _;
    constructor(method, _parameterStructures = ParameterStructures.auto) {
      super(method, 1);
      this._parameterStructures = _parameterStructures;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  exports2.RequestType1 = RequestType1;

  class RequestType2 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 2);
    }
  }
  exports2.RequestType2 = RequestType2;

  class RequestType3 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 3);
    }
  }
  exports2.RequestType3 = RequestType3;

  class RequestType4 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 4);
    }
  }
  exports2.RequestType4 = RequestType4;

  class RequestType5 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 5);
    }
  }
  exports2.RequestType5 = RequestType5;

  class RequestType6 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 6);
    }
  }
  exports2.RequestType6 = RequestType6;

  class RequestType7 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 7);
    }
  }
  exports2.RequestType7 = RequestType7;

  class RequestType8 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 8);
    }
  }
  exports2.RequestType8 = RequestType8;

  class RequestType9 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 9);
    }
  }
  exports2.RequestType9 = RequestType9;

  class NotificationType extends AbstractMessageSignature {
    _parameterStructures;
    _;
    constructor(method, _parameterStructures = ParameterStructures.auto) {
      super(method, 1);
      this._parameterStructures = _parameterStructures;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  exports2.NotificationType = NotificationType;

  class NotificationType0 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 0);
    }
  }
  exports2.NotificationType0 = NotificationType0;

  class NotificationType1 extends AbstractMessageSignature {
    _parameterStructures;
    _;
    constructor(method, _parameterStructures = ParameterStructures.auto) {
      super(method, 1);
      this._parameterStructures = _parameterStructures;
    }
    get parameterStructures() {
      return this._parameterStructures;
    }
  }
  exports2.NotificationType1 = NotificationType1;

  class NotificationType2 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 2);
    }
  }
  exports2.NotificationType2 = NotificationType2;

  class NotificationType3 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 3);
    }
  }
  exports2.NotificationType3 = NotificationType3;

  class NotificationType4 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 4);
    }
  }
  exports2.NotificationType4 = NotificationType4;

  class NotificationType5 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 5);
    }
  }
  exports2.NotificationType5 = NotificationType5;

  class NotificationType6 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 6);
    }
  }
  exports2.NotificationType6 = NotificationType6;

  class NotificationType7 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 7);
    }
  }
  exports2.NotificationType7 = NotificationType7;

  class NotificationType8 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 8);
    }
  }
  exports2.NotificationType8 = NotificationType8;

  class NotificationType9 extends AbstractMessageSignature {
    _;
    constructor(method) {
      super(method, 9);
    }
  }
  exports2.NotificationType9 = NotificationType9;
  var Message;
  (function(Message2) {
    function isRequest(message) {
      const candidate = message;
      return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
    }
    Message2.isRequest = isRequest;
    function isNotification(message) {
      const candidate = message;
      return candidate && is.string(candidate.method) && message.id === undefined;
    }
    Message2.isNotification = isNotification;
    function isResponse(message) {
      const candidate = message;
      return candidate && (candidate.result !== undefined || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
    }
    Message2.isResponse = isResponse;
  })(Message || (exports2.Message = Message = {}));
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/linkedMap.js
var require_linkedMap = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.LRUCache = exports2.LinkedMap = exports2.Touch = undefined;
  var Touch;
  (function(Touch2) {
    Touch2.None = 0;
    Touch2.First = 1;
    Touch2.AsOld = Touch2.First;
    Touch2.Last = 2;
    Touch2.AsNew = Touch2.Last;
  })(Touch || (exports2.Touch = Touch = {}));

  class LinkedMap {
    [Symbol.toStringTag] = "LinkedMap";
    _map;
    _head;
    _tail;
    _size;
    _state;
    constructor() {
      this._map = new Map;
      this._head = undefined;
      this._tail = undefined;
      this._size = 0;
      this._state = 0;
    }
    clear() {
      this._map.clear();
      this._head = undefined;
      this._tail = undefined;
      this._size = 0;
      this._state++;
    }
    isEmpty() {
      return !this._head && !this._tail;
    }
    get size() {
      return this._size;
    }
    get first() {
      return this._head?.value;
    }
    get last() {
      return this._tail?.value;
    }
    before(key) {
      const item = this._map.get(key);
      return item ? item.previous?.value : undefined;
    }
    after(key) {
      const item = this._map.get(key);
      return item ? item.next?.value : undefined;
    }
    has(key) {
      return this._map.has(key);
    }
    get(key, touch = Touch.None) {
      const item = this._map.get(key);
      if (!item) {
        return;
      }
      if (touch !== Touch.None) {
        this.touch(item, touch);
      }
      return item.value;
    }
    set(key, value, touch = Touch.None) {
      let item = this._map.get(key);
      if (item) {
        item.value = value;
        if (touch !== Touch.None) {
          this.touch(item, touch);
        }
      } else {
        item = { key, value, next: undefined, previous: undefined };
        switch (touch) {
          case Touch.None:
            this.addItemLast(item);
            break;
          case Touch.First:
            this.addItemFirst(item);
            break;
          case Touch.Last:
            this.addItemLast(item);
            break;
          default:
            this.addItemLast(item);
            break;
        }
        this._map.set(key, item);
        this._size++;
      }
      return this;
    }
    delete(key) {
      return !!this.remove(key);
    }
    remove(key) {
      const item = this._map.get(key);
      if (!item) {
        return;
      }
      this._map.delete(key);
      this.removeItem(item);
      this._size--;
      return item.value;
    }
    shift() {
      if (!this._head && !this._tail) {
        return;
      }
      if (!this._head || !this._tail) {
        throw new Error("Invalid list");
      }
      const item = this._head;
      this._map.delete(item.key);
      this.removeItem(item);
      this._size--;
      return item.value;
    }
    forEach(callbackfn, thisArg) {
      const state = this._state;
      let current = this._head;
      while (current) {
        if (thisArg) {
          callbackfn.bind(thisArg)(current.value, current.key, this);
        } else {
          callbackfn(current.value, current.key, this);
        }
        if (this._state !== state) {
          throw new Error(`LinkedMap got modified during iteration.`);
        }
        current = current.next;
      }
    }
    keys() {
      const state = this._state;
      let current = this._head;
      const iterator = {
        [Symbol.iterator]: () => {
          return iterator;
        },
        next: () => {
          if (this._state !== state) {
            throw new Error(`LinkedMap got modified during iteration.`);
          }
          if (current) {
            const result = { value: current.key, done: false };
            current = current.next;
            return result;
          } else {
            return { value: undefined, done: true };
          }
        }
      };
      return iterator;
    }
    values() {
      const state = this._state;
      let current = this._head;
      const iterator = {
        [Symbol.iterator]: () => {
          return iterator;
        },
        next: () => {
          if (this._state !== state) {
            throw new Error(`LinkedMap got modified during iteration.`);
          }
          if (current) {
            const result = { value: current.value, done: false };
            current = current.next;
            return result;
          } else {
            return { value: undefined, done: true };
          }
        }
      };
      return iterator;
    }
    entries() {
      const state = this._state;
      let current = this._head;
      const iterator = {
        [Symbol.iterator]: () => {
          return iterator;
        },
        next: () => {
          if (this._state !== state) {
            throw new Error(`LinkedMap got modified during iteration.`);
          }
          if (current) {
            const result = { value: [current.key, current.value], done: false };
            current = current.next;
            return result;
          } else {
            return { value: undefined, done: true };
          }
        }
      };
      return iterator;
    }
    [Symbol.iterator]() {
      return this.entries();
    }
    trimOld(newSize) {
      if (newSize >= this.size) {
        return;
      }
      if (newSize === 0) {
        this.clear();
        return;
      }
      let current = this._head;
      let currentSize = this.size;
      while (current && currentSize > newSize) {
        this._map.delete(current.key);
        current = current.next;
        currentSize--;
      }
      this._head = current;
      this._size = currentSize;
      if (current) {
        current.previous = undefined;
      }
      this._state++;
    }
    addItemFirst(item) {
      if (!this._head && !this._tail) {
        this._tail = item;
      } else if (!this._head) {
        throw new Error("Invalid list");
      } else {
        item.next = this._head;
        this._head.previous = item;
      }
      this._head = item;
      this._state++;
    }
    addItemLast(item) {
      if (!this._head && !this._tail) {
        this._head = item;
      } else if (!this._tail) {
        throw new Error("Invalid list");
      } else {
        item.previous = this._tail;
        this._tail.next = item;
      }
      this._tail = item;
      this._state++;
    }
    removeItem(item) {
      if (item === this._head && item === this._tail) {
        this._head = undefined;
        this._tail = undefined;
      } else if (item === this._head) {
        if (!item.next) {
          throw new Error("Invalid list");
        }
        item.next.previous = undefined;
        this._head = item.next;
      } else if (item === this._tail) {
        if (!item.previous) {
          throw new Error("Invalid list");
        }
        item.previous.next = undefined;
        this._tail = item.previous;
      } else {
        const next = item.next;
        const previous = item.previous;
        if (!next || !previous) {
          throw new Error("Invalid list");
        }
        next.previous = previous;
        previous.next = next;
      }
      item.next = undefined;
      item.previous = undefined;
      this._state++;
    }
    touch(item, touch) {
      if (!this._head || !this._tail) {
        throw new Error("Invalid list");
      }
      if (touch !== Touch.First && touch !== Touch.Last) {
        return;
      }
      if (touch === Touch.First) {
        if (item === this._head) {
          return;
        }
        const next = item.next;
        const previous = item.previous;
        if (item === this._tail) {
          previous.next = undefined;
          this._tail = previous;
        } else {
          next.previous = previous;
          previous.next = next;
        }
        item.previous = undefined;
        item.next = this._head;
        this._head.previous = item;
        this._head = item;
        this._state++;
      } else if (touch === Touch.Last) {
        if (item === this._tail) {
          return;
        }
        const next = item.next;
        const previous = item.previous;
        if (item === this._head) {
          next.previous = undefined;
          this._head = next;
        } else {
          next.previous = previous;
          previous.next = next;
        }
        item.next = undefined;
        item.previous = this._tail;
        this._tail.next = item;
        this._tail = item;
        this._state++;
      }
    }
    toJSON() {
      const data = [];
      this.forEach((value, key) => {
        data.push([key, value]);
      });
      return data;
    }
    fromJSON(data) {
      this.clear();
      for (const [key, value] of data) {
        this.set(key, value);
      }
    }
  }
  exports2.LinkedMap = LinkedMap;

  class LRUCache extends LinkedMap {
    _limit;
    _ratio;
    constructor(limit, ratio = 1) {
      super();
      this._limit = limit;
      this._ratio = Math.min(Math.max(0, ratio), 1);
    }
    get limit() {
      return this._limit;
    }
    set limit(limit) {
      this._limit = limit;
      this.checkTrim();
    }
    get ratio() {
      return this._ratio;
    }
    set ratio(ratio) {
      this._ratio = Math.min(Math.max(0, ratio), 1);
      this.checkTrim();
    }
    get(key, touch = Touch.AsNew) {
      return super.get(key, touch);
    }
    peek(key) {
      return super.get(key, Touch.None);
    }
    set(key, value) {
      super.set(key, value, Touch.Last);
      this.checkTrim();
      return this;
    }
    checkTrim() {
      if (this.size > this._limit) {
        this.trimOld(Math.round(this._limit * this._ratio));
      }
    }
  }
  exports2.LRUCache = LRUCache;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/disposable.js
var require_disposable = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.Disposable = undefined;
  var Disposable;
  (function(Disposable2) {
    function create(func) {
      return {
        dispose: func
      };
    }
    Disposable2.create = create;
  })(Disposable || (exports2.Disposable = Disposable = {}));
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/ral.js
var require_ral = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  var _ral;
  function RAL() {
    if (_ral === undefined) {
      throw new Error(`No runtime abstraction layer installed`);
    }
    return _ral;
  }
  (function(RAL2) {
    function install(ral) {
      if (ral === undefined) {
        throw new Error(`No runtime abstraction layer provided`);
      }
      _ral = ral;
    }
    RAL2.install = install;
  })(RAL || (RAL = {}));
  exports2.default = RAL;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/events.js
var require_events = __commonJS((exports2) => {
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.Emitter = exports2.Event = undefined;
  var ral_1 = __importDefault(require_ral());
  var Event;
  (function(Event2) {
    const _disposable = { dispose() {} };
    Event2.None = function() {
      return _disposable;
    };
  })(Event || (exports2.Event = Event = {}));

  class CallbackList {
    _callbacks;
    _contexts;
    add(callback, context = null, bucket) {
      if (!this._callbacks) {
        this._callbacks = [];
        this._contexts = [];
      }
      this._callbacks.push(callback);
      this._contexts.push(context);
      if (Array.isArray(bucket)) {
        bucket.push({ dispose: () => this.remove(callback, context) });
      }
    }
    remove(callback, context = null) {
      if (!this._callbacks) {
        return;
      }
      let foundCallbackWithDifferentContext = false;
      for (let i = 0, len = this._callbacks.length;i < len; i++) {
        if (this._callbacks[i] === callback) {
          if (this._contexts[i] === context) {
            this._callbacks.splice(i, 1);
            this._contexts.splice(i, 1);
            return;
          } else {
            foundCallbackWithDifferentContext = true;
          }
        }
      }
      if (foundCallbackWithDifferentContext) {
        throw new Error("When adding a listener with a context, you should remove it with the same context");
      }
    }
    invoke(...args) {
      if (!this._callbacks) {
        return [];
      }
      const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
      for (let i = 0, len = callbacks.length;i < len; i++) {
        try {
          ret.push(callbacks[i].apply(contexts[i], args));
        } catch (e) {
          (0, ral_1.default)().console.error(e);
        }
      }
      return ret;
    }
    isEmpty() {
      return !this._callbacks || this._callbacks.length === 0;
    }
    dispose() {
      this._callbacks = undefined;
      this._contexts = undefined;
    }
  }

  class Emitter {
    _options;
    static _noop = function() {};
    _event;
    _callbacks;
    constructor(_options) {
      this._options = _options;
    }
    get event() {
      if (!this._event) {
        this._event = (listener, thisArgs, disposables) => {
          if (!this._callbacks) {
            this._callbacks = new CallbackList;
          }
          if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
            this._options.onFirstListenerAdd(this);
          }
          this._callbacks.add(listener, thisArgs);
          const result = {
            dispose: () => {
              if (!this._callbacks) {
                return;
              }
              this._callbacks.remove(listener, thisArgs);
              result.dispose = Emitter._noop;
              if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
                this._options.onLastListenerRemove(this);
              }
            }
          };
          if (Array.isArray(disposables)) {
            disposables.push(result);
          }
          return result;
        };
      }
      return this._event;
    }
    fire(event) {
      if (this._callbacks) {
        this._callbacks.invoke.call(this._callbacks, event);
      }
    }
    dispose() {
      if (this._callbacks) {
        this._callbacks.dispose();
        this._callbacks = undefined;
      }
    }
  }
  exports2.Emitter = Emitter;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/cancellation.js
var require_cancellation = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CancellationTokenSource = exports2.CancellationToken = undefined;
  var ral_1 = __importDefault(require_ral());
  var Is = __importStar(require_is2());
  var events_1 = require_events();
  var CancellationToken;
  (function(CancellationToken2) {
    CancellationToken2.None = Object.freeze({
      isCancellationRequested: false,
      onCancellationRequested: events_1.Event.None
    });
    CancellationToken2.Cancelled = Object.freeze({
      isCancellationRequested: true,
      onCancellationRequested: events_1.Event.None
    });
    function is(value) {
      const candidate = value;
      return candidate && (candidate === CancellationToken2.None || candidate === CancellationToken2.Cancelled || Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested);
    }
    CancellationToken2.is = is;
  })(CancellationToken || (exports2.CancellationToken = CancellationToken = {}));
  var shortcutEvent = Object.freeze(function(callback, context) {
    const handle = (0, ral_1.default)().timer.setTimeout(callback.bind(context), 0);
    return { dispose() {
      handle.dispose();
    } };
  });

  class MutableToken {
    _isCancelled = false;
    _emitter;
    cancel() {
      if (!this._isCancelled) {
        this._isCancelled = true;
        if (this._emitter) {
          this._emitter.fire(undefined);
          this.dispose();
        }
      }
    }
    get isCancellationRequested() {
      return this._isCancelled;
    }
    get onCancellationRequested() {
      if (this._isCancelled) {
        return shortcutEvent;
      }
      if (!this._emitter) {
        this._emitter = new events_1.Emitter;
      }
      return this._emitter.event;
    }
    dispose() {
      if (this._emitter) {
        this._emitter.dispose();
        this._emitter = undefined;
      }
    }
  }

  class CancellationTokenSource {
    _token;
    get token() {
      if (!this._token) {
        this._token = new MutableToken;
      }
      return this._token;
    }
    cancel() {
      if (!this._token) {
        this._token = CancellationToken.Cancelled;
      } else {
        this._token.cancel();
      }
    }
    dispose() {
      if (!this._token) {
        this._token = CancellationToken.None;
      } else if (this._token instanceof MutableToken) {
        this._token.dispose();
      }
    }
  }
  exports2.CancellationTokenSource = CancellationTokenSource;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/sharedArrayCancellation.js
var require_sharedArrayCancellation = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SharedArrayReceiverStrategy = exports2.SharedArraySenderStrategy = undefined;
  var cancellation_1 = require_cancellation();
  var CancellationState;
  (function(CancellationState2) {
    CancellationState2.Continue = 0;
    CancellationState2.Cancelled = 1;
  })(CancellationState || (CancellationState = {}));

  class SharedArraySenderStrategy {
    buffers;
    constructor() {
      this.buffers = new Map;
    }
    enableCancellation(request) {
      if (request.id === null) {
        return;
      }
      const buffer = new SharedArrayBuffer(4);
      const data = new Int32Array(buffer, 0, 1);
      data[0] = CancellationState.Continue;
      this.buffers.set(request.id, buffer);
      request.$cancellationData = buffer;
    }
    async sendCancellation(_conn, id) {
      const buffer = this.buffers.get(id);
      if (buffer === undefined) {
        return;
      }
      const data = new Int32Array(buffer, 0, 1);
      Atomics.store(data, 0, CancellationState.Cancelled);
    }
    cleanup(id) {
      this.buffers.delete(id);
    }
    dispose() {
      this.buffers.clear();
    }
  }
  exports2.SharedArraySenderStrategy = SharedArraySenderStrategy;

  class SharedArrayBufferCancellationToken {
    data;
    constructor(buffer) {
      this.data = new Int32Array(buffer, 0, 1);
    }
    get isCancellationRequested() {
      return Atomics.load(this.data, 0) === CancellationState.Cancelled;
    }
    get onCancellationRequested() {
      throw new Error(`Cancellation over SharedArrayBuffer doesn't support cancellation events`);
    }
  }

  class SharedArrayBufferCancellationTokenSource {
    token;
    constructor(buffer) {
      this.token = new SharedArrayBufferCancellationToken(buffer);
    }
    cancel() {}
    dispose() {}
  }

  class SharedArrayReceiverStrategy {
    kind = "request";
    createCancellationTokenSource(request) {
      const buffer = request.$cancellationData;
      if (buffer === undefined) {
        return new cancellation_1.CancellationTokenSource;
      }
      return new SharedArrayBufferCancellationTokenSource(buffer);
    }
  }
  exports2.SharedArrayReceiverStrategy = SharedArrayReceiverStrategy;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/semaphore.js
var require_semaphore = __commonJS((exports2) => {
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.Semaphore = undefined;
  var ral_1 = __importDefault(require_ral());

  class Semaphore {
    _capacity;
    _active;
    _waiting;
    constructor(capacity = 1) {
      if (capacity <= 0) {
        throw new Error("Capacity must be greater than 0");
      }
      this._capacity = capacity;
      this._active = 0;
      this._waiting = [];
    }
    lock(thunk) {
      return new Promise((resolve, reject) => {
        this._waiting.push({ thunk, resolve, reject });
        this.runNext();
      });
    }
    get active() {
      return this._active;
    }
    runNext() {
      if (this._waiting.length === 0 || this._active === this._capacity) {
        return;
      }
      (0, ral_1.default)().timer.setImmediate(() => this.doRunNext());
    }
    doRunNext() {
      if (this._waiting.length === 0 || this._active === this._capacity) {
        return;
      }
      const next = this._waiting.shift();
      this._active++;
      if (this._active > this._capacity) {
        throw new Error(`Too many thunks active`);
      }
      try {
        const result = next.thunk();
        if (result instanceof Promise) {
          result.then((value) => {
            this._active--;
            next.resolve(value);
            this.runNext();
          }, (err) => {
            this._active--;
            next.reject(err);
            this.runNext();
          });
        } else {
          this._active--;
          next.resolve(result);
          this.runNext();
        }
      } catch (err) {
        this._active--;
        next.reject(err);
        this.runNext();
      }
    }
  }
  exports2.Semaphore = Semaphore;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/messageReader.js
var require_messageReader = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = undefined;
  var ral_1 = __importDefault(require_ral());
  var Is = __importStar(require_is2());
  var events_1 = require_events();
  var semaphore_1 = require_semaphore();
  var MessageReader;
  (function(MessageReader2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) && Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
    }
    MessageReader2.is = is;
  })(MessageReader || (exports2.MessageReader = MessageReader = {}));

  class AbstractMessageReader {
    errorEmitter;
    closeEmitter;
    partialMessageEmitter;
    constructor() {
      this.errorEmitter = new events_1.Emitter;
      this.closeEmitter = new events_1.Emitter;
      this.partialMessageEmitter = new events_1.Emitter;
    }
    dispose() {
      this.errorEmitter.dispose();
      this.closeEmitter.dispose();
      this.partialMessageEmitter.dispose();
    }
    get onError() {
      return this.errorEmitter.event;
    }
    fireError(error) {
      this.errorEmitter.fire(this.asError(error));
    }
    get onClose() {
      return this.closeEmitter.event;
    }
    fireClose() {
      this.closeEmitter.fire(undefined);
    }
    get onPartialMessage() {
      return this.partialMessageEmitter.event;
    }
    firePartialMessage(info) {
      this.partialMessageEmitter.fire(info);
    }
    asError(error) {
      if (error instanceof Error) {
        return error;
      } else {
        return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
      }
    }
  }
  exports2.AbstractMessageReader = AbstractMessageReader;
  var ResolvedMessageReaderOptions;
  (function(ResolvedMessageReaderOptions2) {
    function fromOptions(options) {
      let charset;
      let result;
      let contentDecoder;
      const contentDecoders = new Map;
      let contentTypeDecoder;
      const contentTypeDecoders = new Map;
      if (options === undefined || typeof options === "string") {
        charset = options ?? "utf-8";
      } else {
        charset = options.charset ?? "utf-8";
        if (options.contentDecoder !== undefined) {
          contentDecoder = options.contentDecoder;
          contentDecoders.set(contentDecoder.name, contentDecoder);
        }
        if (options.contentDecoders !== undefined) {
          for (const decoder of options.contentDecoders) {
            contentDecoders.set(decoder.name, decoder);
          }
        }
        if (options.contentTypeDecoder !== undefined) {
          contentTypeDecoder = options.contentTypeDecoder;
          contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
        }
        if (options.contentTypeDecoders !== undefined) {
          for (const decoder of options.contentTypeDecoders) {
            contentTypeDecoders.set(decoder.name, decoder);
          }
        }
      }
      if (contentTypeDecoder === undefined) {
        contentTypeDecoder = (0, ral_1.default)().applicationJson.decoder;
        contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
      }
      return { charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders };
    }
    ResolvedMessageReaderOptions2.fromOptions = fromOptions;
  })(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));

  class ReadableStreamMessageReader extends AbstractMessageReader {
    readable;
    options;
    callback;
    nextMessageLength;
    messageToken;
    buffer;
    partialMessageTimer;
    _partialMessageTimeout;
    readSemaphore;
    constructor(readable, options) {
      super();
      this.readable = readable;
      this.options = ResolvedMessageReaderOptions.fromOptions(options);
      this.buffer = (0, ral_1.default)().messageBuffer.create(this.options.charset);
      this._partialMessageTimeout = 1e4;
      this.nextMessageLength = -1;
      this.messageToken = 0;
      this.readSemaphore = new semaphore_1.Semaphore(1);
    }
    set partialMessageTimeout(timeout) {
      this._partialMessageTimeout = timeout;
    }
    get partialMessageTimeout() {
      return this._partialMessageTimeout;
    }
    listen(callback) {
      this.nextMessageLength = -1;
      this.messageToken = 0;
      this.partialMessageTimer = undefined;
      this.callback = callback;
      const result = this.readable.onData((data) => {
        this.onData(data);
      });
      this.readable.onError((error) => this.fireError(error));
      this.readable.onClose(() => this.fireClose());
      return result;
    }
    onData(data) {
      try {
        this.buffer.append(data);
        while (true) {
          if (this.nextMessageLength === -1) {
            const headers = this.buffer.tryReadHeaders(true);
            if (!headers) {
              return;
            }
            const contentLength = headers.get("content-length");
            if (!contentLength) {
              this.fireError(new Error(`Header must provide a Content-Length property.
${JSON.stringify(Object.fromEntries(headers))}`));
              return;
            }
            const length = parseInt(contentLength);
            if (isNaN(length)) {
              this.fireError(new Error(`Content-Length value must be a number. Got ${contentLength}`));
              return;
            }
            this.nextMessageLength = length;
          }
          const body = this.buffer.tryReadBody(this.nextMessageLength);
          if (body === undefined) {
            this.setPartialMessageTimer();
            return;
          }
          this.clearPartialMessageTimer();
          this.nextMessageLength = -1;
          this.readSemaphore.lock(async () => {
            const bytes = this.options.contentDecoder !== undefined ? await this.options.contentDecoder.decode(body) : body;
            const message = await this.options.contentTypeDecoder.decode(bytes, this.options);
            this.callback(message);
          }).catch((error) => {
            this.fireError(error);
          });
        }
      } catch (error) {
        this.fireError(error);
      }
    }
    clearPartialMessageTimer() {
      if (this.partialMessageTimer) {
        this.partialMessageTimer.dispose();
        this.partialMessageTimer = undefined;
      }
    }
    setPartialMessageTimer() {
      this.clearPartialMessageTimer();
      if (this._partialMessageTimeout <= 0) {
        return;
      }
      this.partialMessageTimer = (0, ral_1.default)().timer.setTimeout((token, timeout) => {
        this.partialMessageTimer = undefined;
        if (token === this.messageToken) {
          this.firePartialMessage({ messageToken: token, waitingTime: timeout });
          this.setPartialMessageTimer();
        }
      }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
    }
  }
  exports2.ReadableStreamMessageReader = ReadableStreamMessageReader;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/messageWriter.js
var require_messageWriter = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = undefined;
  var ral_1 = __importDefault(require_ral());
  var Is = __importStar(require_is2());
  var semaphore_1 = require_semaphore();
  var events_1 = require_events();
  var ContentLength = "Content-Length: ";
  var CRLF = `\r
`;
  var MessageWriter;
  (function(MessageWriter2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) && Is.func(candidate.onError) && Is.func(candidate.write);
    }
    MessageWriter2.is = is;
  })(MessageWriter || (exports2.MessageWriter = MessageWriter = {}));

  class AbstractMessageWriter {
    errorEmitter;
    closeEmitter;
    constructor() {
      this.errorEmitter = new events_1.Emitter;
      this.closeEmitter = new events_1.Emitter;
    }
    dispose() {
      this.errorEmitter.dispose();
      this.closeEmitter.dispose();
    }
    get onError() {
      return this.errorEmitter.event;
    }
    fireError(error, message, count) {
      this.errorEmitter.fire([this.asError(error), message, count]);
    }
    get onClose() {
      return this.closeEmitter.event;
    }
    fireClose() {
      this.closeEmitter.fire(undefined);
    }
    asError(error) {
      if (error instanceof Error) {
        return error;
      } else {
        return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : "unknown"}`);
      }
    }
  }
  exports2.AbstractMessageWriter = AbstractMessageWriter;
  var ResolvedMessageWriterOptions;
  (function(ResolvedMessageWriterOptions2) {
    function fromOptions(options) {
      if (options === undefined || typeof options === "string") {
        return { charset: options ?? "utf-8", contentTypeEncoder: (0, ral_1.default)().applicationJson.encoder };
      } else {
        return { charset: options.charset ?? "utf-8", contentEncoder: options.contentEncoder, contentTypeEncoder: options.contentTypeEncoder ?? (0, ral_1.default)().applicationJson.encoder };
      }
    }
    ResolvedMessageWriterOptions2.fromOptions = fromOptions;
  })(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));

  class WriteableStreamMessageWriter extends AbstractMessageWriter {
    writable;
    options;
    errorCount;
    writeSemaphore;
    constructor(writable, options) {
      super();
      this.writable = writable;
      this.options = ResolvedMessageWriterOptions.fromOptions(options);
      this.errorCount = 0;
      this.writeSemaphore = new semaphore_1.Semaphore(1);
      this.writable.onError((error) => this.fireError(error));
      this.writable.onClose(() => this.fireClose());
    }
    async write(msg) {
      return this.writeSemaphore.lock(async () => {
        const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
          if (this.options.contentEncoder !== undefined) {
            return this.options.contentEncoder.encode(buffer);
          } else {
            return buffer;
          }
        });
        return payload.then((buffer) => {
          const headers = [];
          headers.push(ContentLength, buffer.byteLength.toString(), CRLF);
          headers.push(CRLF);
          return this.doWrite(msg, headers, buffer);
        }, (error) => {
          this.fireError(error);
          throw error;
        });
      });
    }
    async doWrite(msg, headers, data) {
      try {
        await this.writable.write(headers.join(""), "ascii");
        return this.writable.write(data);
      } catch (error) {
        this.handleError(error, msg);
        return Promise.reject(error);
      }
    }
    handleError(error, msg) {
      this.errorCount++;
      this.fireError(error, msg, this.errorCount);
    }
    end() {
      this.writable.end();
    }
  }
  exports2.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/messageBuffer.js
var require_messageBuffer = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.AbstractMessageBuffer = undefined;
  var CR = 13;
  var LF = 10;
  var CRLF = `\r
`;

  class AbstractMessageBuffer {
    _encoding;
    _chunks;
    _totalLength;
    constructor(encoding = "utf-8") {
      this._encoding = encoding;
      this._chunks = [];
      this._totalLength = 0;
    }
    get encoding() {
      return this._encoding;
    }
    append(chunk) {
      const toAppend = typeof chunk === "string" ? this.fromString(chunk, this._encoding) : chunk;
      this._chunks.push(toAppend);
      this._totalLength += toAppend.byteLength;
    }
    tryReadHeaders(lowerCaseKeys = false) {
      if (this._chunks.length === 0) {
        return;
      }
      let state = 0;
      let chunkIndex = 0;
      let offset = 0;
      let chunkBytesRead = 0;
      row:
        while (chunkIndex < this._chunks.length) {
          const chunk = this._chunks[chunkIndex];
          offset = 0;
          while (offset < chunk.length) {
            const value = chunk[offset];
            switch (value) {
              case CR:
                switch (state) {
                  case 0:
                    state = 1;
                    break;
                  case 2:
                    state = 3;
                    break;
                  default:
                    state = 0;
                }
                break;
              case LF:
                switch (state) {
                  case 1:
                    state = 2;
                    break;
                  case 3:
                    state = 4;
                    offset++;
                    break row;
                  default:
                    state = 0;
                }
                break;
              default:
                state = 0;
            }
            offset++;
          }
          chunkBytesRead += chunk.byteLength;
          chunkIndex++;
        }
      if (state !== 4) {
        return;
      }
      const buffer = this._read(chunkBytesRead + offset);
      const result = new Map;
      const headers = this.toString(buffer, "ascii").split(CRLF);
      if (headers.length < 2) {
        return result;
      }
      for (let i = 0;i < headers.length - 2; i++) {
        const header = headers[i];
        const index = header.indexOf(":");
        if (index === -1) {
          throw new Error(`Message header must separate key and value using ':'
${header}`);
        }
        const key = header.substr(0, index);
        const value = header.substr(index + 1).trim();
        result.set(lowerCaseKeys ? key.toLowerCase() : key, value);
      }
      return result;
    }
    tryReadBody(length) {
      if (this._totalLength < length) {
        return;
      }
      return this._read(length);
    }
    get numberOfBytes() {
      return this._totalLength;
    }
    _read(byteCount) {
      if (byteCount === 0) {
        return this.emptyBuffer();
      }
      if (byteCount > this._totalLength) {
        throw new Error(`Cannot read so many bytes!`);
      }
      if (this._chunks[0].byteLength === byteCount) {
        const chunk = this._chunks[0];
        this._chunks.shift();
        this._totalLength -= byteCount;
        return this.asNative(chunk);
      }
      if (this._chunks[0].byteLength > byteCount) {
        const chunk = this._chunks[0];
        const result2 = this.asNative(chunk, byteCount);
        this._chunks[0] = chunk.slice(byteCount);
        this._totalLength -= byteCount;
        return result2;
      }
      const result = this.allocNative(byteCount);
      let resultOffset = 0;
      const chunkIndex = 0;
      while (byteCount > 0) {
        const chunk = this._chunks[chunkIndex];
        if (chunk.byteLength > byteCount) {
          const chunkPart = chunk.slice(0, byteCount);
          result.set(chunkPart, resultOffset);
          resultOffset += byteCount;
          this._chunks[chunkIndex] = chunk.slice(byteCount);
          this._totalLength -= byteCount;
          byteCount -= byteCount;
        } else {
          result.set(chunk, resultOffset);
          resultOffset += chunk.byteLength;
          this._chunks.shift();
          this._totalLength -= chunk.byteLength;
          byteCount -= chunk.byteLength;
        }
      }
      return result;
    }
  }
  exports2.AbstractMessageBuffer = AbstractMessageBuffer;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/connection.js
var require_connection = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ConnectionOptions = exports2.MessageStrategy = exports2.CancellationStrategy = exports2.CancellationSenderStrategy = exports2.CancellationReceiverStrategy = exports2.RequestCancellationReceiverStrategy = exports2.IdCancellationReceiverStrategy = exports2.ConnectionStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.TraceValues = exports2.TraceValue = exports2.Trace = exports2.NullLogger = exports2.ProgressType = exports2.ProgressToken = undefined;
  exports2.createMessageConnection = createMessageConnection;
  var ral_1 = __importDefault(require_ral());
  var Is = __importStar(require_is2());
  var messages_1 = require_messages();
  var linkedMap_1 = require_linkedMap();
  var events_1 = require_events();
  var cancellation_1 = require_cancellation();
  var CancelNotification;
  (function(CancelNotification2) {
    CancelNotification2.type = new messages_1.NotificationType("$/cancelRequest");
  })(CancelNotification || (CancelNotification = {}));
  var ProgressToken;
  (function(ProgressToken2) {
    function is(value) {
      return typeof value === "string" || typeof value === "number";
    }
    ProgressToken2.is = is;
  })(ProgressToken || (exports2.ProgressToken = ProgressToken = {}));
  var ProgressNotification;
  (function(ProgressNotification2) {
    ProgressNotification2.type = new messages_1.NotificationType("$/progress");
  })(ProgressNotification || (ProgressNotification = {}));

  class ProgressType {
    __;
    _pr;
    constructor() {}
  }
  exports2.ProgressType = ProgressType;
  var StarRequestHandler;
  (function(StarRequestHandler2) {
    function is(value) {
      return Is.func(value);
    }
    StarRequestHandler2.is = is;
  })(StarRequestHandler || (StarRequestHandler = {}));
  exports2.NullLogger = Object.freeze({
    error: () => {},
    warn: () => {},
    info: () => {},
    log: () => {}
  });
  var Trace;
  (function(Trace2) {
    Trace2[Trace2["Off"] = 0] = "Off";
    Trace2[Trace2["Messages"] = 1] = "Messages";
    Trace2[Trace2["Compact"] = 2] = "Compact";
    Trace2[Trace2["Verbose"] = 3] = "Verbose";
  })(Trace || (exports2.Trace = Trace = {}));
  var TraceValue;
  (function(TraceValue2) {
    TraceValue2.Off = "off";
    TraceValue2.Messages = "messages";
    TraceValue2.Compact = "compact";
    TraceValue2.Verbose = "verbose";
  })(TraceValue || (exports2.TraceValue = TraceValue = {}));
  exports2.TraceValues = TraceValue;
  (function(Trace2) {
    function fromString(value) {
      if (!Is.string(value)) {
        return Trace2.Off;
      }
      value = value.toLowerCase();
      switch (value) {
        case "off":
          return Trace2.Off;
        case "messages":
          return Trace2.Messages;
        case "compact":
          return Trace2.Compact;
        case "verbose":
          return Trace2.Verbose;
        default:
          return Trace2.Off;
      }
    }
    Trace2.fromString = fromString;
    function toString(value) {
      switch (value) {
        case Trace2.Off:
          return "off";
        case Trace2.Messages:
          return "messages";
        case Trace2.Compact:
          return "compact";
        case Trace2.Verbose:
          return "verbose";
        default:
          return "off";
      }
    }
    Trace2.toString = toString;
  })(Trace || (exports2.Trace = Trace = {}));
  var TraceFormat;
  (function(TraceFormat2) {
    TraceFormat2["Text"] = "text";
    TraceFormat2["JSON"] = "json";
  })(TraceFormat || (exports2.TraceFormat = TraceFormat = {}));
  (function(TraceFormat2) {
    function fromString(value) {
      if (!Is.string(value)) {
        return TraceFormat2.Text;
      }
      value = value.toLowerCase();
      if (value === "json") {
        return TraceFormat2.JSON;
      } else {
        return TraceFormat2.Text;
      }
    }
    TraceFormat2.fromString = fromString;
  })(TraceFormat || (exports2.TraceFormat = TraceFormat = {}));
  var SetTraceNotification;
  (function(SetTraceNotification2) {
    SetTraceNotification2.type = new messages_1.NotificationType("$/setTrace");
  })(SetTraceNotification || (exports2.SetTraceNotification = SetTraceNotification = {}));
  var LogTraceNotification;
  (function(LogTraceNotification2) {
    LogTraceNotification2.type = new messages_1.NotificationType("$/logTrace");
  })(LogTraceNotification || (exports2.LogTraceNotification = LogTraceNotification = {}));
  var ConnectionErrors;
  (function(ConnectionErrors2) {
    ConnectionErrors2[ConnectionErrors2["Closed"] = 1] = "Closed";
    ConnectionErrors2[ConnectionErrors2["Disposed"] = 2] = "Disposed";
    ConnectionErrors2[ConnectionErrors2["AlreadyListening"] = 3] = "AlreadyListening";
  })(ConnectionErrors || (exports2.ConnectionErrors = ConnectionErrors = {}));

  class ConnectionError extends Error {
    code;
    constructor(code, message) {
      super(message);
      this.code = code;
      Object.setPrototypeOf(this, ConnectionError.prototype);
    }
  }
  exports2.ConnectionError = ConnectionError;
  var ConnectionStrategy;
  (function(ConnectionStrategy2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.func(candidate.cancelUndispatched);
    }
    ConnectionStrategy2.is = is;
  })(ConnectionStrategy || (exports2.ConnectionStrategy = ConnectionStrategy = {}));
  var IdCancellationReceiverStrategy;
  (function(IdCancellationReceiverStrategy2) {
    function is(value) {
      const candidate = value;
      return candidate && (candidate.kind === undefined || candidate.kind === "id") && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));
    }
    IdCancellationReceiverStrategy2.is = is;
  })(IdCancellationReceiverStrategy || (exports2.IdCancellationReceiverStrategy = IdCancellationReceiverStrategy = {}));
  var RequestCancellationReceiverStrategy;
  (function(RequestCancellationReceiverStrategy2) {
    function is(value) {
      const candidate = value;
      return candidate && candidate.kind === "request" && Is.func(candidate.createCancellationTokenSource) && (candidate.dispose === undefined || Is.func(candidate.dispose));
    }
    RequestCancellationReceiverStrategy2.is = is;
  })(RequestCancellationReceiverStrategy || (exports2.RequestCancellationReceiverStrategy = RequestCancellationReceiverStrategy = {}));
  var CancellationReceiverStrategy;
  (function(CancellationReceiverStrategy2) {
    CancellationReceiverStrategy2.Message = Object.freeze({
      createCancellationTokenSource(_) {
        return new cancellation_1.CancellationTokenSource;
      }
    });
    function is(value) {
      return IdCancellationReceiverStrategy.is(value) || RequestCancellationReceiverStrategy.is(value);
    }
    CancellationReceiverStrategy2.is = is;
  })(CancellationReceiverStrategy || (exports2.CancellationReceiverStrategy = CancellationReceiverStrategy = {}));
  var CancellationSenderStrategy;
  (function(CancellationSenderStrategy2) {
    CancellationSenderStrategy2.Message = Object.freeze({
      sendCancellation(conn, id) {
        return conn.sendNotification(CancelNotification.type, { id });
      },
      cleanup(_) {}
    });
    function is(value) {
      const candidate = value;
      return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
    }
    CancellationSenderStrategy2.is = is;
  })(CancellationSenderStrategy || (exports2.CancellationSenderStrategy = CancellationSenderStrategy = {}));
  var CancellationStrategy;
  (function(CancellationStrategy2) {
    CancellationStrategy2.Message = Object.freeze({
      receiver: CancellationReceiverStrategy.Message,
      sender: CancellationSenderStrategy.Message
    });
    function is(value) {
      const candidate = value;
      return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
    }
    CancellationStrategy2.is = is;
  })(CancellationStrategy || (exports2.CancellationStrategy = CancellationStrategy = {}));
  var MessageStrategy;
  (function(MessageStrategy2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.func(candidate.handleMessage);
    }
    MessageStrategy2.is = is;
  })(MessageStrategy || (exports2.MessageStrategy = MessageStrategy = {}));
  var ConnectionOptions;
  (function(ConnectionOptions2) {
    function is(value) {
      const candidate = value;
      return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy) || MessageStrategy.is(candidate.messageStrategy) || Is.number(candidate.maxParallelism));
    }
    ConnectionOptions2.is = is;
  })(ConnectionOptions || (exports2.ConnectionOptions = ConnectionOptions = {}));
  var ConnectionState;
  (function(ConnectionState2) {
    ConnectionState2[ConnectionState2["New"] = 1] = "New";
    ConnectionState2[ConnectionState2["Listening"] = 2] = "Listening";
    ConnectionState2[ConnectionState2["Closed"] = 3] = "Closed";
    ConnectionState2[ConnectionState2["Disposed"] = 4] = "Disposed";
  })(ConnectionState || (ConnectionState = {}));
  function createMessageConnection(messageReader, messageWriter, _logger, options) {
    const logger = _logger !== undefined ? _logger : exports2.NullLogger;
    let sequenceNumber = 0;
    let notificationSequenceNumber = 0;
    let unknownResponseSequenceNumber = 0;
    const version = "2.0";
    const maxParallelism = options?.maxParallelism ?? -1;
    let inFlight = 0;
    let starRequestHandler = undefined;
    const requestHandlers = new Map;
    let starNotificationHandler = undefined;
    const notificationHandlers = new Map;
    const progressHandlers = new Map;
    let timer;
    let messageQueue = new linkedMap_1.LinkedMap;
    let responsePromises = new Map;
    let knownCanceledRequests = new Set;
    let requestTokens = new Map;
    let trace = Trace.Off;
    let traceFormat = TraceFormat.Text;
    let tracer;
    let state = ConnectionState.New;
    const errorEmitter = new events_1.Emitter;
    const closeEmitter = new events_1.Emitter;
    const unhandledNotificationEmitter = new events_1.Emitter;
    const unhandledProgressEmitter = new events_1.Emitter;
    const disposeEmitter = new events_1.Emitter;
    const cancellationStrategy = options && options.cancellationStrategy ? options.cancellationStrategy : CancellationStrategy.Message;
    function cancelUndispatched(_message) {
      return;
    }
    function isListening() {
      return state === ConnectionState.Listening;
    }
    function isClosed() {
      return state === ConnectionState.Closed;
    }
    function isDisposed() {
      return state === ConnectionState.Disposed;
    }
    function closeHandler() {
      if (state === ConnectionState.New || state === ConnectionState.Listening) {
        state = ConnectionState.Closed;
        closeEmitter.fire(undefined);
      }
    }
    function readErrorHandler(error) {
      errorEmitter.fire([error, undefined, undefined]);
    }
    function writeErrorHandler(data) {
      errorEmitter.fire(data);
    }
    messageReader.onClose(closeHandler);
    messageReader.onError(readErrorHandler);
    messageWriter.onClose(closeHandler);
    messageWriter.onError(writeErrorHandler);
    function createRequestQueueKey(id) {
      if (id === null) {
        throw new Error(`Can't send requests with id null since the response can't be correlated.`);
      }
      return "req-" + id.toString();
    }
    function createResponseQueueKey(id) {
      if (id === null) {
        return "res-unknown-" + (++unknownResponseSequenceNumber).toString();
      } else {
        return "res-" + id.toString();
      }
    }
    function createNotificationQueueKey() {
      return "not-" + (++notificationSequenceNumber).toString();
    }
    function addMessageToQueue(queue, message) {
      if (messages_1.Message.isRequest(message)) {
        queue.set(createRequestQueueKey(message.id), message);
      } else if (messages_1.Message.isResponse(message)) {
        if (maxParallelism === -1) {
          queue.set(createResponseQueueKey(message.id), message);
        } else {
          handleResponse(message);
        }
      } else {
        queue.set(createNotificationQueueKey(), message);
      }
    }
    function triggerMessageQueue() {
      if (timer || messageQueue.size === 0) {
        return;
      }
      if (maxParallelism !== -1 && inFlight >= maxParallelism) {
        return;
      }
      timer = (0, ral_1.default)().timer.setImmediate(async () => {
        timer = undefined;
        if (messageQueue.size === 0) {
          return;
        }
        if (maxParallelism !== -1 && inFlight >= maxParallelism) {
          return;
        }
        const message = messageQueue.shift();
        let result;
        try {
          inFlight++;
          const messageStrategy = options?.messageStrategy;
          if (MessageStrategy.is(messageStrategy)) {
            result = messageStrategy.handleMessage(message, handleMessage);
          } else {
            result = handleMessage(message);
          }
        } catch (error) {
          logger.error(`Processing message queue failed: ${error.toString()}`);
        } finally {
          if (result instanceof Promise) {
            result.then(() => {
              inFlight--;
              triggerMessageQueue();
            }).catch((error) => {
              logger.error(`Processing message queue failed: ${error.toString()}`);
            });
          } else {
            inFlight--;
          }
          triggerMessageQueue();
        }
      });
    }
    async function handleMessage(message) {
      if (messages_1.Message.isRequest(message)) {
        return handleRequest(message);
      } else if (messages_1.Message.isNotification(message)) {
        return handleNotification(message);
      } else if (messages_1.Message.isResponse(message)) {
        return handleResponse(message);
      } else {
        return handleInvalidMessage(message);
      }
    }
    const callback = (message) => {
      try {
        if (messages_1.Message.isNotification(message) && message.method === CancelNotification.type.method) {
          const cancelId = message.params.id;
          const key = createRequestQueueKey(cancelId);
          const toCancel = messageQueue.get(key);
          if (messages_1.Message.isRequest(toCancel)) {
            const strategy = options?.connectionStrategy;
            const response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
            if (response && (response.error !== undefined || response.result !== undefined)) {
              messageQueue.delete(key);
              requestTokens.delete(cancelId);
              response.id = toCancel.id;
              traceSendingResponse(response, message.method, Date.now());
              messageWriter.write(response).catch(() => logger.error(`Sending response for canceled message failed.`));
              return;
            }
          }
          const cancellationToken = requestTokens.get(cancelId);
          if (cancellationToken !== undefined) {
            cancellationToken.cancel();
            traceReceivedNotification(message);
            return;
          } else {
            knownCanceledRequests.add(cancelId);
          }
        }
        addMessageToQueue(messageQueue, message);
      } finally {
        triggerMessageQueue();
      }
    };
    async function handleRequest(requestMessage) {
      if (isDisposed()) {
        return Promise.resolve();
      }
      function reply(resultOrError, method, startTime2) {
        const message = {
          jsonrpc: version,
          id: requestMessage.id
        };
        if (resultOrError instanceof messages_1.ResponseError) {
          message.error = resultOrError.toJson();
        } else {
          message.result = resultOrError === undefined ? null : resultOrError;
        }
        traceSendingResponse(message, method, startTime2);
        return messageWriter.write(message);
      }
      function replyError(error, method, startTime2) {
        const message = {
          jsonrpc: version,
          id: requestMessage.id,
          error: error.toJson()
        };
        traceSendingResponse(message, method, startTime2);
        return messageWriter.write(message);
      }
      traceReceivedRequest(requestMessage);
      const element = requestHandlers.get(requestMessage.method);
      let type;
      let requestHandler;
      if (element) {
        type = element.type;
        requestHandler = element.handler;
      }
      const startTime = Date.now();
      if (requestHandler || starRequestHandler) {
        const tokenKey = requestMessage.id ?? String(Date.now());
        const cancellationSource = IdCancellationReceiverStrategy.is(cancellationStrategy.receiver) ? cancellationStrategy.receiver.createCancellationTokenSource(tokenKey) : cancellationStrategy.receiver.createCancellationTokenSource(requestMessage);
        if (requestMessage.id !== null && knownCanceledRequests.has(requestMessage.id)) {
          cancellationSource.cancel();
        }
        if (requestMessage.id !== null) {
          requestTokens.set(tokenKey, cancellationSource);
        }
        try {
          let handlerResult;
          if (requestHandler) {
            if (requestMessage.params === undefined) {
              if (type !== undefined && type.numberOfParams !== 0) {
                return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but received none.`), requestMessage.method, startTime);
              }
              handlerResult = requestHandler(cancellationSource.token);
            } else if (Array.isArray(requestMessage.params)) {
              if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {
                return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
              }
              handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
            } else {
              if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
                return replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
              }
              handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
            }
          } else if (starRequestHandler) {
            handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
          }
          const resultOrError = await handlerResult;
          await reply(resultOrError, requestMessage.method, startTime);
        } catch (error) {
          if (error instanceof messages_1.ResponseError) {
            await reply(error, requestMessage.method, startTime);
          } else if (error && Is.string(error.message)) {
            await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
          } else {
            await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
          }
        } finally {
          requestTokens.delete(tokenKey);
        }
      } else {
        await replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
      }
    }
    function handleResponse(responseMessage) {
      if (isDisposed()) {
        return;
      }
      if (responseMessage.id === null) {
        if (responseMessage.error) {
          logger.error(`Received response message without id: Error is: 
${JSON.stringify(responseMessage.error, undefined, 4)}`);
        } else {
          logger.error(`Received response message without id. No further error information provided.`);
        }
      } else {
        const key = responseMessage.id;
        const responsePromise = responsePromises.get(key);
        traceReceivedResponse(responseMessage, responsePromise);
        if (responsePromise !== undefined) {
          responsePromises.delete(key);
          try {
            if (responseMessage.error) {
              const error = responseMessage.error;
              responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
            } else if (responseMessage.result !== undefined) {
              responsePromise.resolve(responseMessage.result);
            } else {
              throw new Error("Should never happen.");
            }
          } catch (error) {
            if (error.message) {
              logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
            } else {
              logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
            }
          }
        }
      }
    }
    async function handleNotification(message) {
      if (isDisposed()) {
        return;
      }
      let type = undefined;
      let notificationHandler;
      if (message.method === CancelNotification.type.method) {
        const cancelId = message.params.id;
        knownCanceledRequests.delete(cancelId);
        traceReceivedNotification(message);
        return;
      } else {
        const element = notificationHandlers.get(message.method);
        if (element) {
          notificationHandler = element.handler;
          type = element.type;
        }
      }
      if (notificationHandler || starNotificationHandler) {
        try {
          traceReceivedNotification(message);
          if (notificationHandler) {
            if (message.params === undefined) {
              if (type !== undefined) {
                if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {
                  logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received none.`);
                }
              }
              await notificationHandler();
            } else if (Array.isArray(message.params)) {
              const params = message.params;
              if (message.method === ProgressNotification.type.method && params.length === 2 && ProgressToken.is(params[0])) {
                await notificationHandler({ token: params[0], value: params[1] });
              } else {
                if (type !== undefined) {
                  if (type.parameterStructures === messages_1.ParameterStructures.byName) {
                    logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
                  }
                  if (type.numberOfParams !== message.params.length) {
                    logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${params.length} arguments`);
                  }
                }
                await notificationHandler(...params);
              }
            } else {
              if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
                logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
              }
              await notificationHandler(message.params);
            }
          } else if (starNotificationHandler) {
            await starNotificationHandler(message.method, message.params);
          }
        } catch (error) {
          if (error.message) {
            logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
          } else {
            logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
          }
        }
      } else {
        unhandledNotificationEmitter.fire(message);
      }
    }
    function handleInvalidMessage(message) {
      if (!message) {
        logger.error("Received empty message.");
        return;
      }
      logger.error(`Received message which is neither a response nor a notification message:
${JSON.stringify(message, null, 4)}`);
      const responseMessage = message;
      if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
        const key = responseMessage.id;
        const responseHandler = responsePromises.get(key);
        if (responseHandler) {
          responseHandler.reject(new Error("The received response has neither a result nor an error property."));
        }
      }
    }
    function stringifyTrace(params) {
      if (params === undefined || params === null) {
        return;
      }
      switch (trace) {
        case Trace.Verbose:
          return JSON.stringify(params, null, 4);
        case Trace.Compact:
          return JSON.stringify(params);
        default:
          return;
      }
    }
    function traceSendingRequest(message) {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
          data = `Params: ${stringifyTrace(message.params)}`;
        }
        tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
      } else {
        logLSPMessage("send-request", message);
      }
    }
    function traceSendingNotification(message) {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if (trace === Trace.Verbose || trace === Trace.Compact) {
          if (message.params) {
            data = `Params: ${stringifyTrace(message.params)}`;
          } else {
            data = "No parameters provided.";
          }
        }
        tracer.log(`Sending notification '${message.method}'.`, data);
      } else {
        logLSPMessage("send-notification", message);
      }
    }
    function traceSendingResponse(message, method, startTime) {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if (trace === Trace.Verbose || trace === Trace.Compact) {
          if (message.error && message.error.data) {
            data = `Error data: ${stringifyTrace(message.error.data)}`;
          } else {
            if (message.result) {
              data = `Result: ${stringifyTrace(message.result)}`;
            } else if (message.error === undefined) {
              data = "No result returned.";
            }
          }
        }
        tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
      } else {
        logLSPMessage("send-response", message);
      }
    }
    function traceReceivedRequest(message) {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if ((trace === Trace.Verbose || trace === Trace.Compact) && message.params) {
          data = `Params: ${stringifyTrace(message.params)}`;
        }
        tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
      } else {
        logLSPMessage("receive-request", message);
      }
    }
    function traceReceivedNotification(message) {
      if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if (trace === Trace.Verbose || trace === Trace.Compact) {
          if (message.params) {
            data = `Params: ${stringifyTrace(message.params)}`;
          } else {
            data = "No parameters provided.";
          }
        }
        tracer.log(`Received notification '${message.method}'.`, data);
      } else {
        logLSPMessage("receive-notification", message);
      }
    }
    function traceReceivedResponse(message, responsePromise) {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      if (traceFormat === TraceFormat.Text) {
        let data = undefined;
        if (trace === Trace.Verbose || trace === Trace.Compact) {
          if (message.error && message.error.data) {
            data = `Error data: ${stringifyTrace(message.error.data)}`;
          } else {
            if (message.result) {
              data = `Result: ${stringifyTrace(message.result)}`;
            } else if (message.error === undefined) {
              data = "No result returned.";
            }
          }
        }
        if (responsePromise) {
          const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : "";
          tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
        } else {
          tracer.log(`Received response ${message.id} without active response promise.`, data);
        }
      } else {
        logLSPMessage("receive-response", message);
      }
    }
    function logLSPMessage(type, message) {
      if (!tracer || trace === Trace.Off) {
        return;
      }
      const lspMessage = {
        isLSPMessage: true,
        type,
        message,
        timestamp: Date.now()
      };
      tracer.log(lspMessage);
    }
    function throwIfClosedOrDisposed() {
      if (isClosed()) {
        throw new ConnectionError(ConnectionErrors.Closed, "Connection is closed.");
      }
      if (isDisposed()) {
        throw new ConnectionError(ConnectionErrors.Disposed, "Connection is disposed.");
      }
    }
    function throwIfListening() {
      if (isListening()) {
        throw new ConnectionError(ConnectionErrors.AlreadyListening, "Connection is already listening");
      }
    }
    function throwIfNotListening() {
      if (!isListening()) {
        throw new Error("Call listen() first.");
      }
    }
    function undefinedToNull(param) {
      if (param === undefined) {
        return null;
      } else {
        return param;
      }
    }
    function nullToUndefined(param) {
      if (param === null) {
        return;
      } else {
        return param;
      }
    }
    function isNamedParam(param) {
      return param !== undefined && param !== null && !Array.isArray(param) && typeof param === "object";
    }
    function computeSingleParam(parameterStructures, param) {
      switch (parameterStructures) {
        case messages_1.ParameterStructures.auto:
          if (isNamedParam(param)) {
            return nullToUndefined(param);
          } else {
            return [undefinedToNull(param)];
          }
        case messages_1.ParameterStructures.byName:
          if (!isNamedParam(param)) {
            throw new Error(`Received parameters by name but param is not an object literal.`);
          }
          return nullToUndefined(param);
        case messages_1.ParameterStructures.byPosition:
          return [undefinedToNull(param)];
        default:
          throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
      }
    }
    function computeMessageParams(type, params) {
      let result;
      const numberOfParams = type.numberOfParams;
      switch (numberOfParams) {
        case 0:
          result = undefined;
          break;
        case 1:
          result = computeSingleParam(type.parameterStructures, params[0]);
          break;
        default:
          result = [];
          for (let i = 0;i < params.length && i < numberOfParams; i++) {
            result.push(undefinedToNull(params[i]));
          }
          if (params.length < numberOfParams) {
            for (let i = params.length;i < numberOfParams; i++) {
              result.push(null);
            }
          }
          break;
      }
      return result;
    }
    const connection = {
      sendNotification: (type, ...args) => {
        throwIfClosedOrDisposed();
        let method;
        let messageParams;
        if (Is.string(type)) {
          method = type;
          const first = args[0];
          let paramStart = 0;
          let parameterStructures = messages_1.ParameterStructures.auto;
          if (messages_1.ParameterStructures.is(first)) {
            paramStart = 1;
            parameterStructures = first;
          }
          const paramEnd = args.length;
          const numberOfParams = paramEnd - paramStart;
          switch (numberOfParams) {
            case 0:
              messageParams = undefined;
              break;
            case 1:
              messageParams = computeSingleParam(parameterStructures, args[paramStart]);
              break;
            default:
              if (parameterStructures === messages_1.ParameterStructures.byName) {
                throw new Error(`Received ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
              }
              messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
              break;
          }
        } else {
          const params = args;
          method = type.method;
          messageParams = computeMessageParams(type, params);
        }
        const notificationMessage = {
          jsonrpc: version,
          method,
          params: messageParams
        };
        traceSendingNotification(notificationMessage);
        return messageWriter.write(notificationMessage).catch((error) => {
          logger.error(`Sending notification failed.`);
          throw error;
        });
      },
      onNotification: (type, handler) => {
        throwIfClosedOrDisposed();
        let method;
        if (Is.func(type)) {
          starNotificationHandler = type;
        } else if (handler) {
          if (Is.string(type)) {
            method = type;
            notificationHandlers.set(type, { type: undefined, handler });
          } else {
            method = type.method;
            notificationHandlers.set(type.method, { type, handler });
          }
        }
        return {
          dispose: () => {
            if (method !== undefined) {
              if (notificationHandlers.get(method)?.handler === handler) {
                notificationHandlers.delete(method);
              }
            } else if (starNotificationHandler === type) {
              starNotificationHandler = undefined;
            }
          }
        };
      },
      onProgress: (_type, token, handler) => {
        if (progressHandlers.has(token)) {
          throw new Error(`Progress handler for token ${token} already registered`);
        }
        progressHandlers.set(token, handler);
        return {
          dispose: () => {
            if (progressHandlers.get(token) === handler) {
              progressHandlers.delete(token);
            }
          }
        };
      },
      sendProgress: (_type, token, value) => {
        return connection.sendNotification(ProgressNotification.type, { token, value });
      },
      onUnhandledProgress: unhandledProgressEmitter.event,
      sendRequest: (type, ...args) => {
        throwIfClosedOrDisposed();
        throwIfNotListening();
        function sendCancellation(connection2, id2) {
          const p = cancellationStrategy.sender.sendCancellation(connection2, id2);
          if (p === undefined) {
            logger.log(`Received no promise from cancellation strategy when cancelling id ${id2}`);
          } else {
            p.catch(() => {
              logger.log(`Sending cancellation messages for id ${id2} failed.`);
            });
          }
        }
        let method;
        let messageParams;
        let token = undefined;
        if (Is.string(type)) {
          method = type;
          const first = args[0];
          const last = args[args.length - 1];
          let paramStart = 0;
          let parameterStructures = messages_1.ParameterStructures.auto;
          if (messages_1.ParameterStructures.is(first)) {
            paramStart = 1;
            parameterStructures = first;
          }
          let paramEnd = args.length;
          if (cancellation_1.CancellationToken.is(last)) {
            paramEnd = paramEnd - 1;
            token = last;
          }
          const numberOfParams = paramEnd - paramStart;
          switch (numberOfParams) {
            case 0:
              messageParams = undefined;
              break;
            case 1:
              messageParams = computeSingleParam(parameterStructures, args[paramStart]);
              break;
            default:
              if (parameterStructures === messages_1.ParameterStructures.byName) {
                throw new Error(`Received ${numberOfParams} parameters for 'by Name' request parameter structure.`);
              }
              messageParams = args.slice(paramStart, paramEnd).map((value) => undefinedToNull(value));
              break;
          }
        } else {
          const params = args;
          method = type.method;
          messageParams = computeMessageParams(type, params);
          const numberOfParams = type.numberOfParams;
          token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
        }
        const id = sequenceNumber++;
        let disposable;
        let tokenWasCancelled = false;
        if (token !== undefined) {
          if (token.isCancellationRequested) {
            tokenWasCancelled = true;
          } else {
            disposable = token.onCancellationRequested(() => {
              sendCancellation(connection, id);
            });
          }
        }
        const requestMessage = {
          jsonrpc: version,
          id,
          method,
          params: messageParams
        };
        traceSendingRequest(requestMessage);
        if (typeof cancellationStrategy.sender.enableCancellation === "function") {
          cancellationStrategy.sender.enableCancellation(requestMessage);
        }
        return new Promise(async (resolve, reject) => {
          const resolveWithCleanup = (r) => {
            resolve(r);
            cancellationStrategy.sender.cleanup(id);
            disposable?.dispose();
          };
          const rejectWithCleanup = (r) => {
            reject(r);
            cancellationStrategy.sender.cleanup(id);
            disposable?.dispose();
          };
          const responsePromise = { method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };
          try {
            responsePromises.set(id, responsePromise);
            await messageWriter.write(requestMessage);
            if (tokenWasCancelled) {
              sendCancellation(connection, id);
            }
          } catch (error) {
            responsePromises.delete(id);
            responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, error.message ? error.message : "Unknown reason"));
            logger.error(`Sending request failed.`);
            throw error;
          }
        });
      },
      onRequest: (type, handler) => {
        throwIfClosedOrDisposed();
        let method = null;
        if (StarRequestHandler.is(type)) {
          method = undefined;
          starRequestHandler = type;
        } else if (Is.string(type)) {
          method = null;
          if (handler !== undefined) {
            method = type;
            requestHandlers.set(type, { handler, type: undefined });
          }
        } else {
          if (handler !== undefined) {
            method = type.method;
            requestHandlers.set(type.method, { type, handler });
          }
        }
        return {
          dispose: () => {
            if (method === null) {
              return;
            }
            if (method !== undefined) {
              if (requestHandlers.get(method)?.handler === handler) {
                requestHandlers.delete(method);
              }
            } else if (starRequestHandler === type) {
              starRequestHandler = undefined;
            }
          }
        };
      },
      hasPendingResponse: () => {
        return responsePromises.size > 0;
      },
      trace: async (_value, _tracer, sendNotificationOrTraceOptions) => {
        let _sendNotification = false;
        let _traceFormat = TraceFormat.Text;
        if (sendNotificationOrTraceOptions !== undefined) {
          if (Is.boolean(sendNotificationOrTraceOptions)) {
            _sendNotification = sendNotificationOrTraceOptions;
          } else {
            _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
            _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
          }
        }
        trace = _value;
        traceFormat = _traceFormat;
        if (trace === Trace.Off) {
          tracer = undefined;
        } else {
          tracer = _tracer;
        }
        if (_sendNotification && !isClosed() && !isDisposed()) {
          await connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
        }
      },
      onError: errorEmitter.event,
      onClose: closeEmitter.event,
      onUnhandledNotification: unhandledNotificationEmitter.event,
      onDispose: disposeEmitter.event,
      end: () => {
        messageWriter.end();
      },
      dispose: () => {
        if (isDisposed()) {
          return;
        }
        state = ConnectionState.Disposed;
        disposeEmitter.fire(undefined);
        const error = new messages_1.ResponseError(messages_1.ErrorCodes.PendingResponseRejected, "Pending response rejected since connection got disposed");
        for (const promise of responsePromises.values()) {
          promise.reject(error);
        }
        responsePromises = new Map;
        requestTokens = new Map;
        knownCanceledRequests = new Set;
        messageQueue = new linkedMap_1.LinkedMap;
        if (Is.func(messageWriter.dispose)) {
          messageWriter.dispose();
        }
        if (Is.func(messageReader.dispose)) {
          messageReader.dispose();
        }
      },
      listen: () => {
        throwIfClosedOrDisposed();
        throwIfListening();
        state = ConnectionState.Listening;
        messageReader.listen(callback);
      },
      inspect: () => {
        (0, ral_1.default)().console.log("inspect");
      }
    };
    connection.onNotification(LogTraceNotification.type, (params) => {
      if (trace === Trace.Off || !tracer) {
        return;
      }
      const verbose = trace === Trace.Verbose || trace === Trace.Compact;
      tracer.log(params.message, verbose ? params.verbose : undefined);
    });
    connection.onNotification(ProgressNotification.type, async (params) => {
      const handler = progressHandlers.get(params.token);
      if (handler) {
        await handler(params.value);
      } else {
        unhandledProgressEmitter.fire(params);
      }
    });
    return connection;
  }
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/common/api.js
var require_api = __commonJS((exports2) => {
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ProgressType = exports2.ProgressToken = exports2.createMessageConnection = exports2.NullLogger = exports2.ConnectionOptions = exports2.ConnectionStrategy = exports2.AbstractMessageBuffer = exports2.WriteableStreamMessageWriter = exports2.AbstractMessageWriter = exports2.MessageWriter = exports2.ReadableStreamMessageReader = exports2.AbstractMessageReader = exports2.MessageReader = exports2.SharedArrayReceiverStrategy = exports2.SharedArraySenderStrategy = exports2.CancellationToken = exports2.CancellationTokenSource = exports2.Emitter = exports2.Event = exports2.Disposable = exports2.LRUCache = exports2.Touch = exports2.LinkedMap = exports2.ParameterStructures = exports2.NotificationType9 = exports2.NotificationType8 = exports2.NotificationType7 = exports2.NotificationType6 = exports2.NotificationType5 = exports2.NotificationType4 = exports2.NotificationType3 = exports2.NotificationType2 = exports2.NotificationType1 = exports2.NotificationType0 = exports2.NotificationType = exports2.ErrorCodes = exports2.ResponseError = exports2.RequestType9 = exports2.RequestType8 = exports2.RequestType7 = exports2.RequestType6 = exports2.RequestType5 = exports2.RequestType4 = exports2.RequestType3 = exports2.RequestType2 = exports2.RequestType1 = exports2.RequestType0 = exports2.RequestType = exports2.Message = exports2.RAL = undefined;
  exports2.MessageStrategy = exports2.CancellationStrategy = exports2.CancellationSenderStrategy = exports2.RequestCancellationReceiverStrategy = exports2.IdCancellationReceiverStrategy = exports2.CancellationReceiverStrategy = exports2.ConnectionError = exports2.ConnectionErrors = exports2.LogTraceNotification = exports2.SetTraceNotification = exports2.TraceFormat = exports2.TraceValues = exports2.TraceValue = exports2.Trace = undefined;
  var messages_1 = require_messages();
  Object.defineProperty(exports2, "Message", { enumerable: true, get: function() {
    return messages_1.Message;
  } });
  Object.defineProperty(exports2, "RequestType", { enumerable: true, get: function() {
    return messages_1.RequestType;
  } });
  Object.defineProperty(exports2, "RequestType0", { enumerable: true, get: function() {
    return messages_1.RequestType0;
  } });
  Object.defineProperty(exports2, "RequestType1", { enumerable: true, get: function() {
    return messages_1.RequestType1;
  } });
  Object.defineProperty(exports2, "RequestType2", { enumerable: true, get: function() {
    return messages_1.RequestType2;
  } });
  Object.defineProperty(exports2, "RequestType3", { enumerable: true, get: function() {
    return messages_1.RequestType3;
  } });
  Object.defineProperty(exports2, "RequestType4", { enumerable: true, get: function() {
    return messages_1.RequestType4;
  } });
  Object.defineProperty(exports2, "RequestType5", { enumerable: true, get: function() {
    return messages_1.RequestType5;
  } });
  Object.defineProperty(exports2, "RequestType6", { enumerable: true, get: function() {
    return messages_1.RequestType6;
  } });
  Object.defineProperty(exports2, "RequestType7", { enumerable: true, get: function() {
    return messages_1.RequestType7;
  } });
  Object.defineProperty(exports2, "RequestType8", { enumerable: true, get: function() {
    return messages_1.RequestType8;
  } });
  Object.defineProperty(exports2, "RequestType9", { enumerable: true, get: function() {
    return messages_1.RequestType9;
  } });
  Object.defineProperty(exports2, "ResponseError", { enumerable: true, get: function() {
    return messages_1.ResponseError;
  } });
  Object.defineProperty(exports2, "ErrorCodes", { enumerable: true, get: function() {
    return messages_1.ErrorCodes;
  } });
  Object.defineProperty(exports2, "NotificationType", { enumerable: true, get: function() {
    return messages_1.NotificationType;
  } });
  Object.defineProperty(exports2, "NotificationType0", { enumerable: true, get: function() {
    return messages_1.NotificationType0;
  } });
  Object.defineProperty(exports2, "NotificationType1", { enumerable: true, get: function() {
    return messages_1.NotificationType1;
  } });
  Object.defineProperty(exports2, "NotificationType2", { enumerable: true, get: function() {
    return messages_1.NotificationType2;
  } });
  Object.defineProperty(exports2, "NotificationType3", { enumerable: true, get: function() {
    return messages_1.NotificationType3;
  } });
  Object.defineProperty(exports2, "NotificationType4", { enumerable: true, get: function() {
    return messages_1.NotificationType4;
  } });
  Object.defineProperty(exports2, "NotificationType5", { enumerable: true, get: function() {
    return messages_1.NotificationType5;
  } });
  Object.defineProperty(exports2, "NotificationType6", { enumerable: true, get: function() {
    return messages_1.NotificationType6;
  } });
  Object.defineProperty(exports2, "NotificationType7", { enumerable: true, get: function() {
    return messages_1.NotificationType7;
  } });
  Object.defineProperty(exports2, "NotificationType8", { enumerable: true, get: function() {
    return messages_1.NotificationType8;
  } });
  Object.defineProperty(exports2, "NotificationType9", { enumerable: true, get: function() {
    return messages_1.NotificationType9;
  } });
  Object.defineProperty(exports2, "ParameterStructures", { enumerable: true, get: function() {
    return messages_1.ParameterStructures;
  } });
  var linkedMap_1 = require_linkedMap();
  Object.defineProperty(exports2, "LinkedMap", { enumerable: true, get: function() {
    return linkedMap_1.LinkedMap;
  } });
  Object.defineProperty(exports2, "LRUCache", { enumerable: true, get: function() {
    return linkedMap_1.LRUCache;
  } });
  Object.defineProperty(exports2, "Touch", { enumerable: true, get: function() {
    return linkedMap_1.Touch;
  } });
  var disposable_1 = require_disposable();
  Object.defineProperty(exports2, "Disposable", { enumerable: true, get: function() {
    return disposable_1.Disposable;
  } });
  var events_1 = require_events();
  Object.defineProperty(exports2, "Event", { enumerable: true, get: function() {
    return events_1.Event;
  } });
  Object.defineProperty(exports2, "Emitter", { enumerable: true, get: function() {
    return events_1.Emitter;
  } });
  var cancellation_1 = require_cancellation();
  Object.defineProperty(exports2, "CancellationTokenSource", { enumerable: true, get: function() {
    return cancellation_1.CancellationTokenSource;
  } });
  Object.defineProperty(exports2, "CancellationToken", { enumerable: true, get: function() {
    return cancellation_1.CancellationToken;
  } });
  var sharedArrayCancellation_1 = require_sharedArrayCancellation();
  Object.defineProperty(exports2, "SharedArraySenderStrategy", { enumerable: true, get: function() {
    return sharedArrayCancellation_1.SharedArraySenderStrategy;
  } });
  Object.defineProperty(exports2, "SharedArrayReceiverStrategy", { enumerable: true, get: function() {
    return sharedArrayCancellation_1.SharedArrayReceiverStrategy;
  } });
  var messageReader_1 = require_messageReader();
  Object.defineProperty(exports2, "MessageReader", { enumerable: true, get: function() {
    return messageReader_1.MessageReader;
  } });
  Object.defineProperty(exports2, "AbstractMessageReader", { enumerable: true, get: function() {
    return messageReader_1.AbstractMessageReader;
  } });
  Object.defineProperty(exports2, "ReadableStreamMessageReader", { enumerable: true, get: function() {
    return messageReader_1.ReadableStreamMessageReader;
  } });
  var messageWriter_1 = require_messageWriter();
  Object.defineProperty(exports2, "MessageWriter", { enumerable: true, get: function() {
    return messageWriter_1.MessageWriter;
  } });
  Object.defineProperty(exports2, "AbstractMessageWriter", { enumerable: true, get: function() {
    return messageWriter_1.AbstractMessageWriter;
  } });
  Object.defineProperty(exports2, "WriteableStreamMessageWriter", { enumerable: true, get: function() {
    return messageWriter_1.WriteableStreamMessageWriter;
  } });
  var messageBuffer_1 = require_messageBuffer();
  Object.defineProperty(exports2, "AbstractMessageBuffer", { enumerable: true, get: function() {
    return messageBuffer_1.AbstractMessageBuffer;
  } });
  var connection_1 = require_connection();
  Object.defineProperty(exports2, "ConnectionStrategy", { enumerable: true, get: function() {
    return connection_1.ConnectionStrategy;
  } });
  Object.defineProperty(exports2, "ConnectionOptions", { enumerable: true, get: function() {
    return connection_1.ConnectionOptions;
  } });
  Object.defineProperty(exports2, "NullLogger", { enumerable: true, get: function() {
    return connection_1.NullLogger;
  } });
  Object.defineProperty(exports2, "createMessageConnection", { enumerable: true, get: function() {
    return connection_1.createMessageConnection;
  } });
  Object.defineProperty(exports2, "ProgressToken", { enumerable: true, get: function() {
    return connection_1.ProgressToken;
  } });
  Object.defineProperty(exports2, "ProgressType", { enumerable: true, get: function() {
    return connection_1.ProgressType;
  } });
  Object.defineProperty(exports2, "Trace", { enumerable: true, get: function() {
    return connection_1.Trace;
  } });
  Object.defineProperty(exports2, "TraceValue", { enumerable: true, get: function() {
    return connection_1.TraceValue;
  } });
  Object.defineProperty(exports2, "TraceFormat", { enumerable: true, get: function() {
    return connection_1.TraceFormat;
  } });
  Object.defineProperty(exports2, "SetTraceNotification", { enumerable: true, get: function() {
    return connection_1.SetTraceNotification;
  } });
  Object.defineProperty(exports2, "LogTraceNotification", { enumerable: true, get: function() {
    return connection_1.LogTraceNotification;
  } });
  Object.defineProperty(exports2, "ConnectionErrors", { enumerable: true, get: function() {
    return connection_1.ConnectionErrors;
  } });
  Object.defineProperty(exports2, "ConnectionError", { enumerable: true, get: function() {
    return connection_1.ConnectionError;
  } });
  Object.defineProperty(exports2, "CancellationReceiverStrategy", { enumerable: true, get: function() {
    return connection_1.CancellationReceiverStrategy;
  } });
  Object.defineProperty(exports2, "IdCancellationReceiverStrategy", { enumerable: true, get: function() {
    return connection_1.IdCancellationReceiverStrategy;
  } });
  Object.defineProperty(exports2, "RequestCancellationReceiverStrategy", { enumerable: true, get: function() {
    return connection_1.RequestCancellationReceiverStrategy;
  } });
  Object.defineProperty(exports2, "CancellationSenderStrategy", { enumerable: true, get: function() {
    return connection_1.CancellationSenderStrategy;
  } });
  Object.defineProperty(exports2, "CancellationStrategy", { enumerable: true, get: function() {
    return connection_1.CancellationStrategy;
  } });
  Object.defineProperty(exports2, "MessageStrategy", { enumerable: true, get: function() {
    return connection_1.MessageStrategy;
  } });
  Object.defineProperty(exports2, "TraceValues", { enumerable: true, get: function() {
    return connection_1.TraceValues;
  } });
  var ral_1 = __importDefault(require_ral());
  exports2.RAL = ral_1.default;
});

// editors/vscode/node_modules/vscode-languageserver-types/lib/umd/main.js
var require_main = __commonJS((exports2, module2) => {
  (function(factory) {
    if (typeof module2 === "object" && typeof module2.exports === "object") {
      var v = factory(require, exports2);
      if (v !== undefined)
        module2.exports = v;
    } else if (typeof define === "function" && define.amd) {
      define(["require", "exports"], factory);
    }
  })(function(require2, exports3) {
    Object.defineProperty(exports3, "__esModule", { value: true });
    exports3.TextDocument = exports3.EOL = exports3.WorkspaceFolder = exports3.InlineCompletionContext = exports3.SelectedCompletionInfo = exports3.InlineCompletionTriggerKind = exports3.InlineCompletionList = exports3.InlineCompletionItem = exports3.StringValue = exports3.InlayHint = exports3.InlayHintLabelPart = exports3.InlayHintKind = exports3.InlineValueContext = exports3.InlineValueEvaluatableExpression = exports3.InlineValueVariableLookup = exports3.InlineValueText = exports3.SemanticTokens = exports3.SemanticTokenModifiers = exports3.SemanticTokenTypes = exports3.SelectionRange = exports3.DocumentLink = exports3.FormattingOptions = exports3.CodeLens = exports3.CodeAction = exports3.CodeActionTag = exports3.CodeActionContext = exports3.CodeActionTriggerKind = exports3.CodeActionKind = exports3.DocumentSymbol = exports3.WorkspaceSymbol = exports3.SymbolInformation = exports3.SymbolTag = exports3.SymbolKind = exports3.DocumentHighlight = exports3.DocumentHighlightKind = exports3.SignatureInformation = exports3.ParameterInformation = exports3.Hover = exports3.MarkedString = exports3.CompletionList = exports3.CompletionItem = exports3.CompletionItemLabelDetails = exports3.ApplyKind = exports3.InsertTextMode = exports3.InsertReplaceEdit = exports3.CompletionItemTag = exports3.InsertTextFormat = exports3.CompletionItemKind = exports3.MarkupContent = exports3.MarkupKind = exports3.TextDocumentItem = exports3.LanguageKind = exports3.OptionalVersionedTextDocumentIdentifier = exports3.VersionedTextDocumentIdentifier = exports3.TextDocumentIdentifier = exports3.WorkspaceChange = exports3.SnippetTextEdit = exports3.WorkspaceEdit = exports3.DeleteFile = exports3.RenameFile = exports3.CreateFile = exports3.TextDocumentEdit = exports3.AnnotatedTextEdit = exports3.ChangeAnnotationIdentifier = exports3.ChangeAnnotation = exports3.TextEdit = exports3.Command = exports3.Diagnostic = exports3.CodeDescription = exports3.DiagnosticTag = exports3.DiagnosticSeverity = exports3.DiagnosticRelatedInformation = exports3.FoldingRange = exports3.FoldingRangeKind = exports3.ColorPresentation = exports3.ColorInformation = exports3.Color = exports3.LocationLink = exports3.Location = exports3.Range = exports3.Position = exports3.uinteger = exports3.integer = exports3.URI = exports3.DocumentUri = undefined;
    var DocumentUri;
    (function(DocumentUri2) {
      function is(value) {
        return typeof value === "string";
      }
      DocumentUri2.is = is;
    })(DocumentUri || (exports3.DocumentUri = DocumentUri = {}));
    var URI;
    (function(URI2) {
      function is(value) {
        return typeof value === "string";
      }
      URI2.is = is;
    })(URI || (exports3.URI = URI = {}));
    var integer;
    (function(integer2) {
      integer2.MIN_VALUE = -2147483648;
      integer2.MAX_VALUE = 2147483647;
      function is(value) {
        return typeof value === "number" && integer2.MIN_VALUE <= value && value <= integer2.MAX_VALUE;
      }
      integer2.is = is;
    })(integer || (exports3.integer = integer = {}));
    var uinteger;
    (function(uinteger2) {
      uinteger2.MIN_VALUE = 0;
      uinteger2.MAX_VALUE = 2147483647;
      function is(value) {
        return typeof value === "number" && uinteger2.MIN_VALUE <= value && value <= uinteger2.MAX_VALUE;
      }
      uinteger2.is = is;
    })(uinteger || (exports3.uinteger = uinteger = {}));
    var Position;
    (function(Position2) {
      function create(line, character) {
        if (line === Number.MAX_VALUE) {
          line = uinteger.MAX_VALUE;
        }
        if (character === Number.MAX_VALUE) {
          character = uinteger.MAX_VALUE;
        }
        return { line, character };
      }
      Position2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
      }
      Position2.is = is;
    })(Position || (exports3.Position = Position = {}));
    var Range;
    (function(Range2) {
      function create(one, two, three, four) {
        if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
          return { start: Position.create(one, two), end: Position.create(three, four) };
        } else if (Position.is(one) && Position.is(two)) {
          return { start: one, end: two };
        } else {
          throw new Error("Range#create called with invalid arguments[".concat(one, ", ").concat(two, ", ").concat(three, ", ").concat(four, "]"));
        }
      }
      Range2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
      }
      Range2.is = is;
    })(Range || (exports3.Range = Range = {}));
    var Location;
    (function(Location2) {
      function create(uri, range) {
        return { uri, range };
      }
      Location2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
      }
      Location2.is = is;
    })(Location || (exports3.Location = Location = {}));
    var LocationLink;
    (function(LocationLink2) {
      function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
        return { targetUri, targetRange, targetSelectionRange, originSelectionRange };
      }
      LocationLink2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri) && Range.is(candidate.targetSelectionRange) && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
      }
      LocationLink2.is = is;
    })(LocationLink || (exports3.LocationLink = LocationLink = {}));
    var Color;
    (function(Color2) {
      function create(red, green, blue, alpha) {
        return {
          red,
          green,
          blue,
          alpha
        };
      }
      Color2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.numberRange(candidate.red, 0, 1) && Is.numberRange(candidate.green, 0, 1) && Is.numberRange(candidate.blue, 0, 1) && Is.numberRange(candidate.alpha, 0, 1);
      }
      Color2.is = is;
    })(Color || (exports3.Color = Color = {}));
    var ColorInformation;
    (function(ColorInformation2) {
      function create(range, color) {
        return {
          range,
          color
        };
      }
      ColorInformation2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Range.is(candidate.range) && Color.is(candidate.color);
      }
      ColorInformation2.is = is;
    })(ColorInformation || (exports3.ColorInformation = ColorInformation = {}));
    var ColorPresentation;
    (function(ColorPresentation2) {
      function create(label, textEdit, additionalTextEdits) {
        return {
          label,
          textEdit,
          additionalTextEdits
        };
      }
      ColorPresentation2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate)) && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
      }
      ColorPresentation2.is = is;
    })(ColorPresentation || (exports3.ColorPresentation = ColorPresentation = {}));
    var FoldingRangeKind;
    (function(FoldingRangeKind2) {
      FoldingRangeKind2.Comment = "comment";
      FoldingRangeKind2.Imports = "imports";
      FoldingRangeKind2.Region = "region";
    })(FoldingRangeKind || (exports3.FoldingRangeKind = FoldingRangeKind = {}));
    var FoldingRange;
    (function(FoldingRange2) {
      function create(startLine, endLine, startCharacter, endCharacter, kind, collapsedText) {
        var result = {
          startLine,
          endLine
        };
        if (Is.defined(startCharacter)) {
          result.startCharacter = startCharacter;
        }
        if (Is.defined(endCharacter)) {
          result.endCharacter = endCharacter;
        }
        if (Is.defined(kind)) {
          result.kind = kind;
        }
        if (Is.defined(collapsedText)) {
          result.collapsedText = collapsedText;
        }
        return result;
      }
      FoldingRange2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine) && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter)) && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter)) && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
      }
      FoldingRange2.is = is;
    })(FoldingRange || (exports3.FoldingRange = FoldingRange = {}));
    var DiagnosticRelatedInformation;
    (function(DiagnosticRelatedInformation2) {
      function create(location, message) {
        return {
          location,
          message
        };
      }
      DiagnosticRelatedInformation2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
      }
      DiagnosticRelatedInformation2.is = is;
    })(DiagnosticRelatedInformation || (exports3.DiagnosticRelatedInformation = DiagnosticRelatedInformation = {}));
    var DiagnosticSeverity;
    (function(DiagnosticSeverity2) {
      DiagnosticSeverity2.Error = 1;
      DiagnosticSeverity2.Warning = 2;
      DiagnosticSeverity2.Information = 3;
      DiagnosticSeverity2.Hint = 4;
    })(DiagnosticSeverity || (exports3.DiagnosticSeverity = DiagnosticSeverity = {}));
    var DiagnosticTag;
    (function(DiagnosticTag2) {
      DiagnosticTag2.Unnecessary = 1;
      DiagnosticTag2.Deprecated = 2;
    })(DiagnosticTag || (exports3.DiagnosticTag = DiagnosticTag = {}));
    var CodeDescription;
    (function(CodeDescription2) {
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.string(candidate.href);
      }
      CodeDescription2.is = is;
    })(CodeDescription || (exports3.CodeDescription = CodeDescription = {}));
    var Diagnostic;
    (function(Diagnostic2) {
      function create(range, message, severity, code, source, relatedInformation) {
        var result = { range, message };
        if (Is.defined(severity)) {
          result.severity = severity;
        }
        if (Is.defined(code)) {
          result.code = code;
        }
        if (Is.defined(source)) {
          result.source = source;
        }
        if (Is.defined(relatedInformation)) {
          result.relatedInformation = relatedInformation;
        }
        return result;
      }
      Diagnostic2.create = create;
      function is(value) {
        var _a;
        var candidate = value;
        return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.message) || MarkupContent.is(candidate.message)) && (Is.number(candidate.severity) || Is.undefined(candidate.severity)) && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code)) && (Is.undefined(candidate.codeDescription) || Is.string((_a = candidate.codeDescription) === null || _a === undefined ? undefined : _a.href)) && (Is.string(candidate.source) || Is.undefined(candidate.source)) && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
      }
      Diagnostic2.is = is;
      function is3_17(value) {
        return Is.string(value.message);
      }
      Diagnostic2.is3_17 = is3_17;
      function getMessageString(diagnostic) {
        if (Is.string(diagnostic.message)) {
          return diagnostic.message;
        } else if (MarkupContent.is(diagnostic.message)) {
          return diagnostic.message.value;
        } else {
          throw new Error("Unknown message type ".concat(typeof diagnostic.message));
        }
      }
      Diagnostic2.getMessageString = getMessageString;
    })(Diagnostic || (exports3.Diagnostic = Diagnostic = {}));
    var Command;
    (function(Command2) {
      function create(title, command) {
        var args = [];
        for (var _i = 2;_i < arguments.length; _i++) {
          args[_i - 2] = arguments[_i];
        }
        var result = { title, command };
        if (Is.defined(args) && args.length > 0) {
          result.arguments = args;
        }
        return result;
      }
      Command2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.title) && (candidate.tooltip === undefined || Is.string(candidate.tooltip)) && Is.string(candidate.command);
      }
      Command2.is = is;
    })(Command || (exports3.Command = Command = {}));
    var TextEdit;
    (function(TextEdit2) {
      function replace(range, newText) {
        return { range, newText };
      }
      TextEdit2.replace = replace;
      function insert(position, newText) {
        return { range: { start: position, end: position }, newText };
      }
      TextEdit2.insert = insert;
      function del(range) {
        return { range, newText: "" };
      }
      TextEdit2.del = del;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.string(candidate.newText) && Range.is(candidate.range);
      }
      TextEdit2.is = is;
    })(TextEdit || (exports3.TextEdit = TextEdit = {}));
    var ChangeAnnotation;
    (function(ChangeAnnotation2) {
      function create(label, needsConfirmation, description) {
        var result = { label };
        if (needsConfirmation !== undefined) {
          result.needsConfirmation = needsConfirmation;
        }
        if (description !== undefined) {
          result.description = description;
        }
        return result;
      }
      ChangeAnnotation2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Is.string(candidate.label) && (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) && (Is.string(candidate.description) || candidate.description === undefined);
      }
      ChangeAnnotation2.is = is;
    })(ChangeAnnotation || (exports3.ChangeAnnotation = ChangeAnnotation = {}));
    var ChangeAnnotationIdentifier;
    (function(ChangeAnnotationIdentifier2) {
      function is(value) {
        var candidate = value;
        return Is.string(candidate);
      }
      ChangeAnnotationIdentifier2.is = is;
    })(ChangeAnnotationIdentifier || (exports3.ChangeAnnotationIdentifier = ChangeAnnotationIdentifier = {}));
    var AnnotatedTextEdit;
    (function(AnnotatedTextEdit2) {
      function replace(range, newText, annotation) {
        return { range, newText, annotationId: annotation };
      }
      AnnotatedTextEdit2.replace = replace;
      function insert(position, newText, annotation) {
        return { range: { start: position, end: position }, newText, annotationId: annotation };
      }
      AnnotatedTextEdit2.insert = insert;
      function del(range, annotation) {
        return { range, newText: "", annotationId: annotation };
      }
      AnnotatedTextEdit2.del = del;
      function is(value) {
        var candidate = value;
        return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
      }
      AnnotatedTextEdit2.is = is;
    })(AnnotatedTextEdit || (exports3.AnnotatedTextEdit = AnnotatedTextEdit = {}));
    var TextDocumentEdit;
    (function(TextDocumentEdit2) {
      function create(textDocument, edits) {
        return { textDocument, edits };
      }
      TextDocumentEdit2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument) && Array.isArray(candidate.edits);
      }
      TextDocumentEdit2.is = is;
    })(TextDocumentEdit || (exports3.TextDocumentEdit = TextDocumentEdit = {}));
    var CreateFile;
    (function(CreateFile2) {
      function create(uri, options, annotation) {
        var result = {
          kind: "create",
          uri
        };
        if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
          result.options = options;
        }
        if (annotation !== undefined) {
          result.annotationId = annotation;
        }
        return result;
      }
      CreateFile2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && candidate.kind === "create" && Is.string(candidate.uri) && (candidate.options === undefined || (candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
      }
      CreateFile2.is = is;
    })(CreateFile || (exports3.CreateFile = CreateFile = {}));
    var RenameFile;
    (function(RenameFile2) {
      function create(oldUri, newUri, options, annotation) {
        var result = {
          kind: "rename",
          oldUri,
          newUri
        };
        if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
          result.options = options;
        }
        if (annotation !== undefined) {
          result.annotationId = annotation;
        }
        return result;
      }
      RenameFile2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && candidate.kind === "rename" && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined || (candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
      }
      RenameFile2.is = is;
    })(RenameFile || (exports3.RenameFile = RenameFile = {}));
    var DeleteFile;
    (function(DeleteFile2) {
      function create(uri, options, annotation) {
        var result = {
          kind: "delete",
          uri
        };
        if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {
          result.options = options;
        }
        if (annotation !== undefined) {
          result.annotationId = annotation;
        }
        return result;
      }
      DeleteFile2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && candidate.kind === "delete" && Is.string(candidate.uri) && (candidate.options === undefined || (candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
      }
      DeleteFile2.is = is;
    })(DeleteFile || (exports3.DeleteFile = DeleteFile = {}));
    var WorkspaceEdit;
    (function(WorkspaceEdit2) {
      function is(value) {
        var candidate = value;
        return candidate && (candidate.changes !== undefined || candidate.documentChanges !== undefined) && (candidate.documentChanges === undefined || candidate.documentChanges.every(function(change) {
          if (Is.string(change.kind)) {
            return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
          } else {
            return TextDocumentEdit.is(change);
          }
        }));
      }
      WorkspaceEdit2.is = is;
    })(WorkspaceEdit || (exports3.WorkspaceEdit = WorkspaceEdit = {}));
    var TextEditChangeImpl = function() {
      function TextEditChangeImpl2(edits, changeAnnotations) {
        this.edits = edits;
        this.changeAnnotations = changeAnnotations;
      }
      TextEditChangeImpl2.prototype.insert = function(position, newText, annotation) {
        var edit;
        var id;
        if (annotation === undefined) {
          edit = TextEdit.insert(position, newText);
        } else if (ChangeAnnotationIdentifier.is(annotation)) {
          id = annotation;
          edit = AnnotatedTextEdit.insert(position, newText, annotation);
        } else {
          this.assertChangeAnnotations(this.changeAnnotations);
          id = this.changeAnnotations.manage(annotation);
          edit = AnnotatedTextEdit.insert(position, newText, id);
        }
        this.edits.push(edit);
        if (id !== undefined) {
          return id;
        }
      };
      TextEditChangeImpl2.prototype.replace = function(range, newText, annotation) {
        var edit;
        var id;
        if (annotation === undefined) {
          edit = TextEdit.replace(range, newText);
        } else if (ChangeAnnotationIdentifier.is(annotation)) {
          id = annotation;
          edit = AnnotatedTextEdit.replace(range, newText, annotation);
        } else {
          this.assertChangeAnnotations(this.changeAnnotations);
          id = this.changeAnnotations.manage(annotation);
          edit = AnnotatedTextEdit.replace(range, newText, id);
        }
        this.edits.push(edit);
        if (id !== undefined) {
          return id;
        }
      };
      TextEditChangeImpl2.prototype.delete = function(range, annotation) {
        var edit;
        var id;
        if (annotation === undefined) {
          edit = TextEdit.del(range);
        } else if (ChangeAnnotationIdentifier.is(annotation)) {
          id = annotation;
          edit = AnnotatedTextEdit.del(range, annotation);
        } else {
          this.assertChangeAnnotations(this.changeAnnotations);
          id = this.changeAnnotations.manage(annotation);
          edit = AnnotatedTextEdit.del(range, id);
        }
        this.edits.push(edit);
        if (id !== undefined) {
          return id;
        }
      };
      TextEditChangeImpl2.prototype.add = function(edit) {
        this.edits.push(edit);
      };
      TextEditChangeImpl2.prototype.all = function() {
        return this.edits;
      };
      TextEditChangeImpl2.prototype.clear = function() {
        this.edits.splice(0, this.edits.length);
      };
      TextEditChangeImpl2.prototype.assertChangeAnnotations = function(value) {
        if (value === undefined) {
          throw new Error("Text edit change is not configured to manage change annotations.");
        }
      };
      return TextEditChangeImpl2;
    }();
    var SnippetTextEdit;
    (function(SnippetTextEdit2) {
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Range.is(candidate.range) && StringValue.isSnippet(candidate.snippet) && (candidate.annotationId === undefined || (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId)));
      }
      SnippetTextEdit2.is = is;
    })(SnippetTextEdit || (exports3.SnippetTextEdit = SnippetTextEdit = {}));
    var ChangeAnnotations = function() {
      function ChangeAnnotations2(annotations) {
        this._annotations = annotations === undefined ? Object.create(null) : annotations;
        this._counter = 0;
        this._size = 0;
      }
      ChangeAnnotations2.prototype.all = function() {
        return this._annotations;
      };
      Object.defineProperty(ChangeAnnotations2.prototype, "size", {
        get: function() {
          return this._size;
        },
        enumerable: false,
        configurable: true
      });
      ChangeAnnotations2.prototype.manage = function(idOrAnnotation, annotation) {
        var id;
        if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
          id = idOrAnnotation;
        } else {
          id = this.nextId();
          annotation = idOrAnnotation;
        }
        if (this._annotations[id] !== undefined) {
          throw new Error("Id ".concat(id, " is already in use."));
        }
        if (annotation === undefined) {
          throw new Error("No annotation provided for id ".concat(id));
        }
        this._annotations[id] = annotation;
        this._size++;
        return id;
      };
      ChangeAnnotations2.prototype.nextId = function() {
        this._counter++;
        return this._counter.toString();
      };
      return ChangeAnnotations2;
    }();
    var WorkspaceChange = function() {
      function WorkspaceChange2(workspaceEdit) {
        var _this = this;
        this._textEditChanges = Object.create(null);
        if (workspaceEdit !== undefined) {
          this._workspaceEdit = workspaceEdit;
          if (workspaceEdit.documentChanges) {
            this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
            workspaceEdit.changeAnnotations = this._changeAnnotations.all();
            workspaceEdit.documentChanges.forEach(function(change) {
              if (TextDocumentEdit.is(change)) {
                var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
                _this._textEditChanges[change.textDocument.uri] = textEditChange;
              }
            });
          } else if (workspaceEdit.changes) {
            Object.keys(workspaceEdit.changes).forEach(function(key) {
              var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
              _this._textEditChanges[key] = textEditChange;
            });
          }
        } else {
          this._workspaceEdit = {};
        }
      }
      Object.defineProperty(WorkspaceChange2.prototype, "edit", {
        get: function() {
          this.initDocumentChanges();
          if (this._changeAnnotations !== undefined) {
            if (this._changeAnnotations.size === 0) {
              this._workspaceEdit.changeAnnotations = undefined;
            } else {
              this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
            }
          }
          return this._workspaceEdit;
        },
        enumerable: false,
        configurable: true
      });
      WorkspaceChange2.prototype.getTextEditChange = function(key) {
        if (OptionalVersionedTextDocumentIdentifier.is(key)) {
          this.initDocumentChanges();
          if (this._workspaceEdit.documentChanges === undefined) {
            throw new Error("Workspace edit is not configured for document changes.");
          }
          var textDocument = { uri: key.uri, version: key.version };
          var result = this._textEditChanges[textDocument.uri];
          if (!result) {
            var edits = [];
            var textDocumentEdit = {
              textDocument,
              edits
            };
            this._workspaceEdit.documentChanges.push(textDocumentEdit);
            result = new TextEditChangeImpl(edits, this._changeAnnotations);
            this._textEditChanges[textDocument.uri] = result;
          }
          return result;
        } else {
          this.initChanges();
          if (this._workspaceEdit.changes === undefined) {
            throw new Error("Workspace edit is not configured for normal text edit changes.");
          }
          var result = this._textEditChanges[key];
          if (!result) {
            var edits = [];
            this._workspaceEdit.changes[key] = edits;
            result = new TextEditChangeImpl(edits);
            this._textEditChanges[key] = result;
          }
          return result;
        }
      };
      WorkspaceChange2.prototype.initDocumentChanges = function() {
        if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
          this._changeAnnotations = new ChangeAnnotations;
          this._workspaceEdit.documentChanges = [];
          this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
        }
      };
      WorkspaceChange2.prototype.initChanges = function() {
        if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
          this._workspaceEdit.changes = Object.create(null);
        }
      };
      WorkspaceChange2.prototype.createFile = function(uri, optionsOrAnnotation, options) {
        this.initDocumentChanges();
        if (this._workspaceEdit.documentChanges === undefined) {
          throw new Error("Workspace edit is not configured for document changes.");
        }
        var annotation;
        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
          annotation = optionsOrAnnotation;
        } else {
          options = optionsOrAnnotation;
        }
        var operation;
        var id;
        if (annotation === undefined) {
          operation = CreateFile.create(uri, options);
        } else {
          id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
          operation = CreateFile.create(uri, options, id);
        }
        this._workspaceEdit.documentChanges.push(operation);
        if (id !== undefined) {
          return id;
        }
      };
      WorkspaceChange2.prototype.renameFile = function(oldUri, newUri, optionsOrAnnotation, options) {
        this.initDocumentChanges();
        if (this._workspaceEdit.documentChanges === undefined) {
          throw new Error("Workspace edit is not configured for document changes.");
        }
        var annotation;
        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
          annotation = optionsOrAnnotation;
        } else {
          options = optionsOrAnnotation;
        }
        var operation;
        var id;
        if (annotation === undefined) {
          operation = RenameFile.create(oldUri, newUri, options);
        } else {
          id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
          operation = RenameFile.create(oldUri, newUri, options, id);
        }
        this._workspaceEdit.documentChanges.push(operation);
        if (id !== undefined) {
          return id;
        }
      };
      WorkspaceChange2.prototype.deleteFile = function(uri, optionsOrAnnotation, options) {
        this.initDocumentChanges();
        if (this._workspaceEdit.documentChanges === undefined) {
          throw new Error("Workspace edit is not configured for document changes.");
        }
        var annotation;
        if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
          annotation = optionsOrAnnotation;
        } else {
          options = optionsOrAnnotation;
        }
        var operation;
        var id;
        if (annotation === undefined) {
          operation = DeleteFile.create(uri, options);
        } else {
          id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
          operation = DeleteFile.create(uri, options, id);
        }
        this._workspaceEdit.documentChanges.push(operation);
        if (id !== undefined) {
          return id;
        }
      };
      return WorkspaceChange2;
    }();
    exports3.WorkspaceChange = WorkspaceChange;
    var TextDocumentIdentifier;
    (function(TextDocumentIdentifier2) {
      function create(uri) {
        return { uri };
      }
      TextDocumentIdentifier2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.uri);
      }
      TextDocumentIdentifier2.is = is;
    })(TextDocumentIdentifier || (exports3.TextDocumentIdentifier = TextDocumentIdentifier = {}));
    var VersionedTextDocumentIdentifier;
    (function(VersionedTextDocumentIdentifier2) {
      function create(uri, version) {
        return { uri, version };
      }
      VersionedTextDocumentIdentifier2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
      }
      VersionedTextDocumentIdentifier2.is = is;
    })(VersionedTextDocumentIdentifier || (exports3.VersionedTextDocumentIdentifier = VersionedTextDocumentIdentifier = {}));
    var OptionalVersionedTextDocumentIdentifier;
    (function(OptionalVersionedTextDocumentIdentifier2) {
      function create(uri, version) {
        return { uri, version };
      }
      OptionalVersionedTextDocumentIdentifier2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
      }
      OptionalVersionedTextDocumentIdentifier2.is = is;
    })(OptionalVersionedTextDocumentIdentifier || (exports3.OptionalVersionedTextDocumentIdentifier = OptionalVersionedTextDocumentIdentifier = {}));
    var LanguageKind;
    (function(LanguageKind2) {
      LanguageKind2.ABAP = "abap";
      LanguageKind2.WindowsBat = "bat";
      LanguageKind2.BibTeX = "bibtex";
      LanguageKind2.Clojure = "clojure";
      LanguageKind2.Coffeescript = "coffeescript";
      LanguageKind2.C = "c";
      LanguageKind2.CPP = "cpp";
      LanguageKind2.CSharp = "csharp";
      LanguageKind2.CSS = "css";
      LanguageKind2.D = "d";
      LanguageKind2.Delphi = "pascal";
      LanguageKind2.Diff = "diff";
      LanguageKind2.Dart = "dart";
      LanguageKind2.Dockerfile = "dockerfile";
      LanguageKind2.Elixir = "elixir";
      LanguageKind2.Erlang = "erlang";
      LanguageKind2.FSharp = "fsharp";
      LanguageKind2.GitCommit = "git-commit";
      LanguageKind2.GitRebase = "git-rebase";
      LanguageKind2.Go = "go";
      LanguageKind2.Groovy = "groovy";
      LanguageKind2.Handlebars = "handlebars";
      LanguageKind2.Haskell = "haskell";
      LanguageKind2.HTML = "html";
      LanguageKind2.Ini = "ini";
      LanguageKind2.Java = "java";
      LanguageKind2.JavaScript = "javascript";
      LanguageKind2.JavaScriptReact = "javascriptreact";
      LanguageKind2.JSON = "json";
      LanguageKind2.LaTeX = "latex";
      LanguageKind2.Less = "less";
      LanguageKind2.Lua = "lua";
      LanguageKind2.Makefile = "makefile";
      LanguageKind2.Markdown = "markdown";
      LanguageKind2.ObjectiveC = "objective-c";
      LanguageKind2.ObjectiveCPP = "objective-cpp";
      LanguageKind2.Pascal = "pascal";
      LanguageKind2.Perl = "perl";
      LanguageKind2.Perl6 = "perl6";
      LanguageKind2.PHP = "php";
      LanguageKind2.Plaintext = "plaintext";
      LanguageKind2.Powershell = "powershell";
      LanguageKind2.Pug = "jade";
      LanguageKind2.Python = "python";
      LanguageKind2.R = "r";
      LanguageKind2.Razor = "razor";
      LanguageKind2.Ruby = "ruby";
      LanguageKind2.Rust = "rust";
      LanguageKind2.SCSS = "scss";
      LanguageKind2.SASS = "sass";
      LanguageKind2.Scala = "scala";
      LanguageKind2.ShaderLab = "shaderlab";
      LanguageKind2.ShellScript = "shellscript";
      LanguageKind2.SQL = "sql";
      LanguageKind2.Swift = "swift";
      LanguageKind2.TypeScript = "typescript";
      LanguageKind2.TypeScriptReact = "typescriptreact";
      LanguageKind2.TeX = "tex";
      LanguageKind2.VisualBasic = "vb";
      LanguageKind2.XML = "xml";
      LanguageKind2.XSL = "xsl";
      LanguageKind2.YAML = "yaml";
    })(LanguageKind || (exports3.LanguageKind = LanguageKind = {}));
    var TextDocumentItem;
    (function(TextDocumentItem2) {
      function create(uri, languageId, version, text) {
        return { uri, languageId, version, text };
      }
      TextDocumentItem2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
      }
      TextDocumentItem2.is = is;
    })(TextDocumentItem || (exports3.TextDocumentItem = TextDocumentItem = {}));
    var MarkupKind;
    (function(MarkupKind2) {
      MarkupKind2.PlainText = "plaintext";
      MarkupKind2.Markdown = "markdown";
      function is(value) {
        var candidate = value;
        return candidate === MarkupKind2.PlainText || candidate === MarkupKind2.Markdown;
      }
      MarkupKind2.is = is;
    })(MarkupKind || (exports3.MarkupKind = MarkupKind = {}));
    var MarkupContent;
    (function(MarkupContent2) {
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
      }
      MarkupContent2.is = is;
    })(MarkupContent || (exports3.MarkupContent = MarkupContent = {}));
    var CompletionItemKind;
    (function(CompletionItemKind2) {
      CompletionItemKind2.Text = 1;
      CompletionItemKind2.Method = 2;
      CompletionItemKind2.Function = 3;
      CompletionItemKind2.Constructor = 4;
      CompletionItemKind2.Field = 5;
      CompletionItemKind2.Variable = 6;
      CompletionItemKind2.Class = 7;
      CompletionItemKind2.Interface = 8;
      CompletionItemKind2.Module = 9;
      CompletionItemKind2.Property = 10;
      CompletionItemKind2.Unit = 11;
      CompletionItemKind2.Value = 12;
      CompletionItemKind2.Enum = 13;
      CompletionItemKind2.Keyword = 14;
      CompletionItemKind2.Snippet = 15;
      CompletionItemKind2.Color = 16;
      CompletionItemKind2.File = 17;
      CompletionItemKind2.Reference = 18;
      CompletionItemKind2.Folder = 19;
      CompletionItemKind2.EnumMember = 20;
      CompletionItemKind2.Constant = 21;
      CompletionItemKind2.Struct = 22;
      CompletionItemKind2.Event = 23;
      CompletionItemKind2.Operator = 24;
      CompletionItemKind2.TypeParameter = 25;
    })(CompletionItemKind || (exports3.CompletionItemKind = CompletionItemKind = {}));
    var InsertTextFormat;
    (function(InsertTextFormat2) {
      InsertTextFormat2.PlainText = 1;
      InsertTextFormat2.Snippet = 2;
    })(InsertTextFormat || (exports3.InsertTextFormat = InsertTextFormat = {}));
    var CompletionItemTag;
    (function(CompletionItemTag2) {
      CompletionItemTag2.Deprecated = 1;
    })(CompletionItemTag || (exports3.CompletionItemTag = CompletionItemTag = {}));
    var InsertReplaceEdit;
    (function(InsertReplaceEdit2) {
      function create(newText, insert, replace) {
        return { newText, insert, replace };
      }
      InsertReplaceEdit2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
      }
      InsertReplaceEdit2.is = is;
    })(InsertReplaceEdit || (exports3.InsertReplaceEdit = InsertReplaceEdit = {}));
    var InsertTextMode;
    (function(InsertTextMode2) {
      InsertTextMode2.asIs = 1;
      InsertTextMode2.adjustIndentation = 2;
    })(InsertTextMode || (exports3.InsertTextMode = InsertTextMode = {}));
    var ApplyKind;
    (function(ApplyKind2) {
      ApplyKind2.Replace = 1;
      ApplyKind2.Merge = 2;
    })(ApplyKind || (exports3.ApplyKind = ApplyKind = {}));
    var CompletionItemLabelDetails;
    (function(CompletionItemLabelDetails2) {
      function is(value) {
        var candidate = value;
        return candidate && (Is.string(candidate.detail) || candidate.detail === undefined) && (Is.string(candidate.description) || candidate.description === undefined);
      }
      CompletionItemLabelDetails2.is = is;
    })(CompletionItemLabelDetails || (exports3.CompletionItemLabelDetails = CompletionItemLabelDetails = {}));
    var CompletionItem;
    (function(CompletionItem2) {
      function create(label) {
        return { label };
      }
      CompletionItem2.create = create;
    })(CompletionItem || (exports3.CompletionItem = CompletionItem = {}));
    var CompletionList;
    (function(CompletionList2) {
      function create(items, isIncomplete) {
        return { items: items ? items : [], isIncomplete: !!isIncomplete };
      }
      CompletionList2.create = create;
    })(CompletionList || (exports3.CompletionList = CompletionList = {}));
    var MarkedString;
    (function(MarkedString2) {
      function fromPlainText(plainText) {
        return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&");
      }
      MarkedString2.fromPlainText = fromPlainText;
      function is(value) {
        var candidate = value;
        return Is.string(candidate) || Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value);
      }
      MarkedString2.is = is;
    })(MarkedString || (exports3.MarkedString = MarkedString = {}));
    var Hover;
    (function(Hover2) {
      function is(value) {
        var candidate = value;
        return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) || MarkedString.is(candidate.contents) || Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));
      }
      Hover2.is = is;
    })(Hover || (exports3.Hover = Hover = {}));
    var ParameterInformation;
    (function(ParameterInformation2) {
      function create(label, documentation) {
        return documentation ? { label, documentation } : { label };
      }
      ParameterInformation2.create = create;
    })(ParameterInformation || (exports3.ParameterInformation = ParameterInformation = {}));
    var SignatureInformation;
    (function(SignatureInformation2) {
      function create(label, documentation) {
        var parameters = [];
        for (var _i = 2;_i < arguments.length; _i++) {
          parameters[_i - 2] = arguments[_i];
        }
        var result = { label };
        if (Is.defined(documentation)) {
          result.documentation = documentation;
        }
        if (Is.defined(parameters)) {
          result.parameters = parameters;
        } else {
          result.parameters = [];
        }
        return result;
      }
      SignatureInformation2.create = create;
    })(SignatureInformation || (exports3.SignatureInformation = SignatureInformation = {}));
    var DocumentHighlightKind;
    (function(DocumentHighlightKind2) {
      DocumentHighlightKind2.Text = 1;
      DocumentHighlightKind2.Read = 2;
      DocumentHighlightKind2.Write = 3;
    })(DocumentHighlightKind || (exports3.DocumentHighlightKind = DocumentHighlightKind = {}));
    var DocumentHighlight;
    (function(DocumentHighlight2) {
      function create(range, kind) {
        var result = { range };
        if (Is.number(kind)) {
          result.kind = kind;
        }
        return result;
      }
      DocumentHighlight2.create = create;
    })(DocumentHighlight || (exports3.DocumentHighlight = DocumentHighlight = {}));
    var SymbolKind;
    (function(SymbolKind2) {
      SymbolKind2.File = 1;
      SymbolKind2.Module = 2;
      SymbolKind2.Namespace = 3;
      SymbolKind2.Package = 4;
      SymbolKind2.Class = 5;
      SymbolKind2.Method = 6;
      SymbolKind2.Property = 7;
      SymbolKind2.Field = 8;
      SymbolKind2.Constructor = 9;
      SymbolKind2.Enum = 10;
      SymbolKind2.Interface = 11;
      SymbolKind2.Function = 12;
      SymbolKind2.Variable = 13;
      SymbolKind2.Constant = 14;
      SymbolKind2.String = 15;
      SymbolKind2.Number = 16;
      SymbolKind2.Boolean = 17;
      SymbolKind2.Array = 18;
      SymbolKind2.Object = 19;
      SymbolKind2.Key = 20;
      SymbolKind2.Null = 21;
      SymbolKind2.EnumMember = 22;
      SymbolKind2.Struct = 23;
      SymbolKind2.Event = 24;
      SymbolKind2.Operator = 25;
      SymbolKind2.TypeParameter = 26;
    })(SymbolKind || (exports3.SymbolKind = SymbolKind = {}));
    var SymbolTag;
    (function(SymbolTag2) {
      SymbolTag2.Deprecated = 1;
    })(SymbolTag || (exports3.SymbolTag = SymbolTag = {}));
    var SymbolInformation;
    (function(SymbolInformation2) {
      function create(name, kind, range, uri, containerName) {
        var result = {
          name,
          kind,
          location: { uri, range }
        };
        if (containerName) {
          result.containerName = containerName;
        }
        return result;
      }
      SymbolInformation2.create = create;
    })(SymbolInformation || (exports3.SymbolInformation = SymbolInformation = {}));
    var WorkspaceSymbol;
    (function(WorkspaceSymbol2) {
      function create(name, kind, uri, range) {
        return range !== undefined ? { name, kind, location: { uri, range } } : { name, kind, location: { uri } };
      }
      WorkspaceSymbol2.create = create;
    })(WorkspaceSymbol || (exports3.WorkspaceSymbol = WorkspaceSymbol = {}));
    var DocumentSymbol;
    (function(DocumentSymbol2) {
      function create(name, detail, kind, range, selectionRange, children) {
        var result = {
          name,
          detail,
          kind,
          range,
          selectionRange
        };
        if (children !== undefined) {
          result.children = children;
        }
        return result;
      }
      DocumentSymbol2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && Is.string(candidate.name) && Is.number(candidate.kind) && Range.is(candidate.range) && Range.is(candidate.selectionRange) && (candidate.detail === undefined || Is.string(candidate.detail)) && (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) && (candidate.children === undefined || Array.isArray(candidate.children)) && (candidate.tags === undefined || Array.isArray(candidate.tags));
      }
      DocumentSymbol2.is = is;
    })(DocumentSymbol || (exports3.DocumentSymbol = DocumentSymbol = {}));
    var CodeActionKind;
    (function(CodeActionKind2) {
      CodeActionKind2.Empty = "";
      CodeActionKind2.QuickFix = "quickfix";
      CodeActionKind2.Refactor = "refactor";
      CodeActionKind2.RefactorExtract = "refactor.extract";
      CodeActionKind2.RefactorInline = "refactor.inline";
      CodeActionKind2.RefactorMove = "refactor.move";
      CodeActionKind2.RefactorRewrite = "refactor.rewrite";
      CodeActionKind2.Source = "source";
      CodeActionKind2.SourceOrganizeImports = "source.organizeImports";
      CodeActionKind2.SourceFixAll = "source.fixAll";
      CodeActionKind2.Notebook = "notebook";
    })(CodeActionKind || (exports3.CodeActionKind = CodeActionKind = {}));
    var CodeActionTriggerKind;
    (function(CodeActionTriggerKind2) {
      CodeActionTriggerKind2.Invoked = 1;
      CodeActionTriggerKind2.Automatic = 2;
    })(CodeActionTriggerKind || (exports3.CodeActionTriggerKind = CodeActionTriggerKind = {}));
    var CodeActionContext;
    (function(CodeActionContext2) {
      function create(diagnostics, only, triggerKind) {
        var result = { diagnostics };
        if (only !== undefined && only !== null) {
          result.only = only;
        }
        if (triggerKind !== undefined && triggerKind !== null) {
          result.triggerKind = triggerKind;
        }
        return result;
      }
      CodeActionContext2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string)) && (candidate.triggerKind === undefined || candidate.triggerKind === CodeActionTriggerKind.Invoked || candidate.triggerKind === CodeActionTriggerKind.Automatic);
      }
      CodeActionContext2.is = is;
    })(CodeActionContext || (exports3.CodeActionContext = CodeActionContext = {}));
    var CodeActionTag;
    (function(CodeActionTag2) {
      CodeActionTag2.LLMGenerated = 1;
      function is(value) {
        return Is.defined(value) && value === CodeActionTag2.LLMGenerated;
      }
      CodeActionTag2.is = is;
    })(CodeActionTag || (exports3.CodeActionTag = CodeActionTag = {}));
    var CodeAction;
    (function(CodeAction2) {
      function create(title, kindOrCommandOrEdit, kind) {
        var result = { title };
        var checkKind = true;
        if (typeof kindOrCommandOrEdit === "string") {
          checkKind = false;
          result.kind = kindOrCommandOrEdit;
        } else if (Command.is(kindOrCommandOrEdit)) {
          result.command = kindOrCommandOrEdit;
        } else {
          result.edit = kindOrCommandOrEdit;
        }
        if (checkKind && kind !== undefined) {
          result.kind = kind;
        }
        return result;
      }
      CodeAction2.create = create;
      function is(value) {
        var candidate = value;
        return candidate && Is.string(candidate.title) && (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) && (candidate.kind === undefined || Is.string(candidate.kind)) && (candidate.edit !== undefined || candidate.command !== undefined) && (candidate.command === undefined || Command.is(candidate.command)) && (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) && (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit)) && (candidate.tags === undefined || Is.typedArray(candidate.tags, CodeActionTag.is));
      }
      CodeAction2.is = is;
    })(CodeAction || (exports3.CodeAction = CodeAction = {}));
    var CodeLens;
    (function(CodeLens2) {
      function create(range, data) {
        var result = { range };
        if (Is.defined(data)) {
          result.data = data;
        }
        return result;
      }
      CodeLens2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
      }
      CodeLens2.is = is;
    })(CodeLens || (exports3.CodeLens = CodeLens = {}));
    var FormattingOptions;
    (function(FormattingOptions2) {
      function create(tabSize, insertSpaces) {
        return { tabSize, insertSpaces };
      }
      FormattingOptions2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
      }
      FormattingOptions2.is = is;
    })(FormattingOptions || (exports3.FormattingOptions = FormattingOptions = {}));
    var DocumentLink;
    (function(DocumentLink2) {
      function create(range, target, data) {
        return { range, target, data };
      }
      DocumentLink2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
      }
      DocumentLink2.is = is;
    })(DocumentLink || (exports3.DocumentLink = DocumentLink = {}));
    var SelectionRange;
    (function(SelectionRange2) {
      function create(range, parent) {
        return { range, parent };
      }
      SelectionRange2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange2.is(candidate.parent));
      }
      SelectionRange2.is = is;
    })(SelectionRange || (exports3.SelectionRange = SelectionRange = {}));
    var SemanticTokenTypes;
    (function(SemanticTokenTypes2) {
      SemanticTokenTypes2["namespace"] = "namespace";
      SemanticTokenTypes2["type"] = "type";
      SemanticTokenTypes2["class"] = "class";
      SemanticTokenTypes2["enum"] = "enum";
      SemanticTokenTypes2["interface"] = "interface";
      SemanticTokenTypes2["struct"] = "struct";
      SemanticTokenTypes2["typeParameter"] = "typeParameter";
      SemanticTokenTypes2["parameter"] = "parameter";
      SemanticTokenTypes2["variable"] = "variable";
      SemanticTokenTypes2["property"] = "property";
      SemanticTokenTypes2["enumMember"] = "enumMember";
      SemanticTokenTypes2["event"] = "event";
      SemanticTokenTypes2["function"] = "function";
      SemanticTokenTypes2["method"] = "method";
      SemanticTokenTypes2["macro"] = "macro";
      SemanticTokenTypes2["keyword"] = "keyword";
      SemanticTokenTypes2["modifier"] = "modifier";
      SemanticTokenTypes2["comment"] = "comment";
      SemanticTokenTypes2["string"] = "string";
      SemanticTokenTypes2["number"] = "number";
      SemanticTokenTypes2["regexp"] = "regexp";
      SemanticTokenTypes2["operator"] = "operator";
      SemanticTokenTypes2["decorator"] = "decorator";
      SemanticTokenTypes2["label"] = "label";
    })(SemanticTokenTypes || (exports3.SemanticTokenTypes = SemanticTokenTypes = {}));
    var SemanticTokenModifiers;
    (function(SemanticTokenModifiers2) {
      SemanticTokenModifiers2["declaration"] = "declaration";
      SemanticTokenModifiers2["definition"] = "definition";
      SemanticTokenModifiers2["readonly"] = "readonly";
      SemanticTokenModifiers2["static"] = "static";
      SemanticTokenModifiers2["deprecated"] = "deprecated";
      SemanticTokenModifiers2["abstract"] = "abstract";
      SemanticTokenModifiers2["async"] = "async";
      SemanticTokenModifiers2["modification"] = "modification";
      SemanticTokenModifiers2["documentation"] = "documentation";
      SemanticTokenModifiers2["defaultLibrary"] = "defaultLibrary";
    })(SemanticTokenModifiers || (exports3.SemanticTokenModifiers = SemanticTokenModifiers = {}));
    var SemanticTokens;
    (function(SemanticTokens2) {
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && (candidate.resultId === undefined || typeof candidate.resultId === "string") && Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === "number");
      }
      SemanticTokens2.is = is;
    })(SemanticTokens || (exports3.SemanticTokens = SemanticTokens = {}));
    var InlineValueText;
    (function(InlineValueText2) {
      function create(range, text) {
        return { range, text };
      }
      InlineValueText2.create = create;
      function is(value) {
        var candidate = value;
        return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.string(candidate.text);
      }
      InlineValueText2.is = is;
    })(InlineValueText || (exports3.InlineValueText = InlineValueText = {}));
    var InlineValueVariableLookup;
    (function(InlineValueVariableLookup2) {
      function create(range, variableName, caseSensitiveLookup) {
        return { range, variableName, caseSensitiveLookup };
      }
      InlineValueVariableLookup2.create = create;
      function is(value) {
        var candidate = value;
        return candidate !== undefined && candidate !== null && Range.is(candidate.range) && Is.boolean(candidate.caseSensitiveLookup) && (Is.string(candidate.variableName) || candidate.variableName === undefined);
      }
      InlineValueVariableLookup2.is = is;
    })(InlineValueVariableLookup || (exports3.InlineValueVariableLookup = InlineValueVariableLookup = {}));
    var InlineValueEvaluatableExpression;
    (function(InlineValueEvaluatableExpression2) {
      function create(range, expression) {
        return { range, expression };
      }
      InlineValueEvaluatableExpression2.create = create;
      function is(value) {
        var candidate = value;
        return candidate !== undefined && candidate !== null && Range.is(candidate.range) && (Is.string(candidate.expression) || candidate.expression === undefined);
      }
      InlineValueEvaluatableExpression2.is = is;
    })(InlineValueEvaluatableExpression || (exports3.InlineValueEvaluatableExpression = InlineValueEvaluatableExpression = {}));
    var InlineValueContext;
    (function(InlineValueContext2) {
      function create(frameId, stoppedLocation) {
        return { frameId, stoppedLocation };
      }
      InlineValueContext2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Range.is(value.stoppedLocation);
      }
      InlineValueContext2.is = is;
    })(InlineValueContext || (exports3.InlineValueContext = InlineValueContext = {}));
    var InlayHintKind;
    (function(InlayHintKind2) {
      InlayHintKind2.Type = 1;
      InlayHintKind2.Parameter = 2;
      function is(value) {
        return value === 1 || value === 2;
      }
      InlayHintKind2.is = is;
    })(InlayHintKind || (exports3.InlayHintKind = InlayHintKind = {}));
    var InlayHintLabelPart;
    (function(InlayHintLabelPart2) {
      function create(value) {
        return { value };
      }
      InlayHintLabelPart2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.location === undefined || Location.is(candidate.location)) && (candidate.command === undefined || Command.is(candidate.command));
      }
      InlayHintLabelPart2.is = is;
    })(InlayHintLabelPart || (exports3.InlayHintLabelPart = InlayHintLabelPart = {}));
    var InlayHint;
    (function(InlayHint2) {
      function create(position, label, kind) {
        var result = { position, label };
        if (kind !== undefined) {
          result.kind = kind;
        }
        return result;
      }
      InlayHint2.create = create;
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && Position.is(candidate.position) && (Is.string(candidate.label) || Is.typedArray(candidate.label, InlayHintLabelPart.is)) && (candidate.kind === undefined || InlayHintKind.is(candidate.kind)) && candidate.textEdits === undefined || Is.typedArray(candidate.textEdits, TextEdit.is) && (candidate.tooltip === undefined || Is.string(candidate.tooltip) || MarkupContent.is(candidate.tooltip)) && (candidate.paddingLeft === undefined || Is.boolean(candidate.paddingLeft)) && (candidate.paddingRight === undefined || Is.boolean(candidate.paddingRight));
      }
      InlayHint2.is = is;
    })(InlayHint || (exports3.InlayHint = InlayHint = {}));
    var StringValue;
    (function(StringValue2) {
      function createSnippet(value) {
        return { kind: "snippet", value };
      }
      StringValue2.createSnippet = createSnippet;
      function isSnippet(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && candidate.kind === "snippet" && Is.string(candidate.value);
      }
      StringValue2.isSnippet = isSnippet;
    })(StringValue || (exports3.StringValue = StringValue = {}));
    var InlineCompletionItem;
    (function(InlineCompletionItem2) {
      function create(insertText, filterText, range, command) {
        return { insertText, filterText, range, command };
      }
      InlineCompletionItem2.create = create;
    })(InlineCompletionItem || (exports3.InlineCompletionItem = InlineCompletionItem = {}));
    var InlineCompletionList;
    (function(InlineCompletionList2) {
      function create(items) {
        return { items };
      }
      InlineCompletionList2.create = create;
    })(InlineCompletionList || (exports3.InlineCompletionList = InlineCompletionList = {}));
    var InlineCompletionTriggerKind;
    (function(InlineCompletionTriggerKind2) {
      InlineCompletionTriggerKind2.Invoked = 1;
      InlineCompletionTriggerKind2.Automatic = 2;
    })(InlineCompletionTriggerKind || (exports3.InlineCompletionTriggerKind = InlineCompletionTriggerKind = {}));
    var SelectedCompletionInfo;
    (function(SelectedCompletionInfo2) {
      function create(range, text) {
        return { range, text };
      }
      SelectedCompletionInfo2.create = create;
    })(SelectedCompletionInfo || (exports3.SelectedCompletionInfo = SelectedCompletionInfo = {}));
    var InlineCompletionContext;
    (function(InlineCompletionContext2) {
      function create(triggerKind, selectedCompletionInfo) {
        return { triggerKind, selectedCompletionInfo };
      }
      InlineCompletionContext2.create = create;
    })(InlineCompletionContext || (exports3.InlineCompletionContext = InlineCompletionContext = {}));
    var WorkspaceFolder;
    (function(WorkspaceFolder2) {
      function is(value) {
        var candidate = value;
        return Is.objectLiteral(candidate) && URI.is(candidate.uri) && Is.string(candidate.name);
      }
      WorkspaceFolder2.is = is;
    })(WorkspaceFolder || (exports3.WorkspaceFolder = WorkspaceFolder = {}));
    exports3.EOL = [`
`, `\r
`, "\r"];
    var TextDocument;
    (function(TextDocument2) {
      function create(uri, languageId, version, content) {
        return new FullTextDocument(uri, languageId, version, content);
      }
      TextDocument2.create = create;
      function is(value) {
        var candidate = value;
        return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount) && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
      }
      TextDocument2.is = is;
      function applyEdits(document, edits) {
        var text = document.getText();
        var sortedEdits = mergeSort(edits, function(a, b) {
          var diff = a.range.start.line - b.range.start.line;
          if (diff === 0) {
            return a.range.start.character - b.range.start.character;
          }
          return diff;
        });
        var lastModifiedOffset = text.length;
        for (var i = sortedEdits.length - 1;i >= 0; i--) {
          var e = sortedEdits[i];
          var startOffset = document.offsetAt(e.range.start);
          var endOffset = document.offsetAt(e.range.end);
          if (endOffset <= lastModifiedOffset) {
            text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
          } else {
            throw new Error("Overlapping edit");
          }
          lastModifiedOffset = startOffset;
        }
        return text;
      }
      TextDocument2.applyEdits = applyEdits;
      function mergeSort(data, compare) {
        if (data.length <= 1) {
          return data;
        }
        var p = data.length / 2 | 0;
        var left = data.slice(0, p);
        var right = data.slice(p);
        mergeSort(left, compare);
        mergeSort(right, compare);
        var leftIdx = 0;
        var rightIdx = 0;
        var i = 0;
        while (leftIdx < left.length && rightIdx < right.length) {
          var ret = compare(left[leftIdx], right[rightIdx]);
          if (ret <= 0) {
            data[i++] = left[leftIdx++];
          } else {
            data[i++] = right[rightIdx++];
          }
        }
        while (leftIdx < left.length) {
          data[i++] = left[leftIdx++];
        }
        while (rightIdx < right.length) {
          data[i++] = right[rightIdx++];
        }
        return data;
      }
    })(TextDocument || (exports3.TextDocument = TextDocument = {}));
    var FullTextDocument = function() {
      function FullTextDocument2(uri, languageId, version, content) {
        this._uri = uri;
        this._languageId = languageId;
        this._version = version;
        this._content = content;
        this._lineOffsets = undefined;
      }
      Object.defineProperty(FullTextDocument2.prototype, "uri", {
        get: function() {
          return this._uri;
        },
        enumerable: false,
        configurable: true
      });
      Object.defineProperty(FullTextDocument2.prototype, "languageId", {
        get: function() {
          return this._languageId;
        },
        enumerable: false,
        configurable: true
      });
      Object.defineProperty(FullTextDocument2.prototype, "version", {
        get: function() {
          return this._version;
        },
        enumerable: false,
        configurable: true
      });
      FullTextDocument2.prototype.getText = function(range) {
        if (range) {
          var start = this.offsetAt(range.start);
          var end = this.offsetAt(range.end);
          return this._content.substring(start, end);
        }
        return this._content;
      };
      FullTextDocument2.prototype.update = function(event, version) {
        this._content = event.text;
        this._version = version;
        this._lineOffsets = undefined;
      };
      FullTextDocument2.prototype.getLineOffsets = function() {
        if (this._lineOffsets === undefined) {
          var lineOffsets = [];
          var text = this._content;
          var isLineStart = true;
          for (var i = 0;i < text.length; i++) {
            if (isLineStart) {
              lineOffsets.push(i);
              isLineStart = false;
            }
            var ch = text.charAt(i);
            isLineStart = ch === "\r" || ch === `
`;
            if (ch === "\r" && i + 1 < text.length && text.charAt(i + 1) === `
`) {
              i++;
            }
          }
          if (isLineStart && text.length > 0) {
            lineOffsets.push(text.length);
          }
          this._lineOffsets = lineOffsets;
        }
        return this._lineOffsets;
      };
      FullTextDocument2.prototype.positionAt = function(offset) {
        offset = Math.max(Math.min(offset, this._content.length), 0);
        var lineOffsets = this.getLineOffsets();
        var low = 0, high = lineOffsets.length;
        if (high === 0) {
          return Position.create(0, offset);
        }
        while (low < high) {
          var mid = Math.floor((low + high) / 2);
          if (lineOffsets[mid] > offset) {
            high = mid;
          } else {
            low = mid + 1;
          }
        }
        var line = low - 1;
        return Position.create(line, offset - lineOffsets[line]);
      };
      FullTextDocument2.prototype.offsetAt = function(position) {
        var lineOffsets = this.getLineOffsets();
        if (position.line >= lineOffsets.length) {
          return this._content.length;
        } else if (position.line < 0) {
          return 0;
        }
        var lineOffset = lineOffsets[position.line];
        var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
        return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
      };
      Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
        get: function() {
          return this.getLineOffsets().length;
        },
        enumerable: false,
        configurable: true
      });
      return FullTextDocument2;
    }();
    var Is;
    (function(Is2) {
      var toString = Object.prototype.toString;
      function defined(value) {
        return typeof value !== "undefined";
      }
      Is2.defined = defined;
      function undefined2(value) {
        return typeof value === "undefined";
      }
      Is2.undefined = undefined2;
      function boolean(value) {
        return value === true || value === false;
      }
      Is2.boolean = boolean;
      function string(value) {
        return toString.call(value) === "[object String]";
      }
      Is2.string = string;
      function number(value) {
        return toString.call(value) === "[object Number]";
      }
      Is2.number = number;
      function numberRange(value, min, max) {
        return toString.call(value) === "[object Number]" && min <= value && value <= max;
      }
      Is2.numberRange = numberRange;
      function integer2(value) {
        return toString.call(value) === "[object Number]" && -2147483648 <= value && value <= 2147483647;
      }
      Is2.integer = integer2;
      function uinteger2(value) {
        return toString.call(value) === "[object Number]" && 0 <= value && value <= 2147483647;
      }
      Is2.uinteger = uinteger2;
      function func(value) {
        return toString.call(value) === "[object Function]";
      }
      Is2.func = func;
      function objectLiteral(value) {
        return value !== null && typeof value === "object";
      }
      Is2.objectLiteral = objectLiteral;
      function typedArray(value, check) {
        return Array.isArray(value) && value.every(check);
      }
      Is2.typedArray = typedArray;
    })(Is || (Is = {}));
  });
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/messages.js
var require_messages2 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CM = exports2.ProtocolNotificationType = exports2.ProtocolNotificationType0 = exports2.ProtocolRequestType = exports2.ProtocolRequestType0 = exports2.RegistrationType = exports2.MessageDirection = undefined;
  var vscode_jsonrpc_1 = require_api();
  var MessageDirection;
  (function(MessageDirection2) {
    MessageDirection2["clientToServer"] = "clientToServer";
    MessageDirection2["serverToClient"] = "serverToClient";
    MessageDirection2["both"] = "both";
  })(MessageDirection || (exports2.MessageDirection = MessageDirection = {}));

  class RegistrationType {
    ____;
    method;
    constructor(method) {
      this.method = method;
    }
  }
  exports2.RegistrationType = RegistrationType;

  class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
    __;
    ___;
    ____;
    _pr;
    constructor(method) {
      super(method);
    }
  }
  exports2.ProtocolRequestType0 = ProtocolRequestType0;

  class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
    __;
    ___;
    ____;
    _pr;
    constructor(method) {
      super(method, vscode_jsonrpc_1.ParameterStructures.byName);
    }
  }
  exports2.ProtocolRequestType = ProtocolRequestType;

  class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
    ___;
    ____;
    constructor(method) {
      super(method);
    }
  }
  exports2.ProtocolNotificationType0 = ProtocolNotificationType0;

  class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
    ___;
    ____;
    constructor(method) {
      super(method, vscode_jsonrpc_1.ParameterStructures.byName);
    }
  }
  exports2.ProtocolNotificationType = ProtocolNotificationType;
  var CM;
  (function(CM2) {
    function create(client, server) {
      return { client, server };
    }
    CM2.create = create;
  })(CM || (exports2.CM = CM = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/utils/is.js
var require_is3 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.boolean = boolean;
  exports2.string = string;
  exports2.number = number;
  exports2.error = error;
  exports2.func = func;
  exports2.array = array;
  exports2.stringArray = stringArray;
  exports2.typedArray = typedArray;
  exports2.objectLiteral = objectLiteral;
  function boolean(value) {
    return value === true || value === false;
  }
  function string(value) {
    return typeof value === "string" || value instanceof String;
  }
  function number(value) {
    return typeof value === "number" || value instanceof Number;
  }
  function error(value) {
    return value instanceof Error;
  }
  function func(value) {
    return typeof value === "function";
  }
  function array(value) {
    return Array.isArray(value);
  }
  function stringArray(value) {
    return array(value) && value.every((elem) => string(elem));
  }
  function typedArray(value, check) {
    return Array.isArray(value) && value.every(check);
  }
  function objectLiteral(value) {
    return value !== null && typeof value === "object";
  }
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.implementation.js
var require_protocol_implementation = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ImplementationRequest = undefined;
  var messages_1 = require_messages2();
  var ImplementationRequest;
  (function(ImplementationRequest2) {
    ImplementationRequest2.method = "textDocument/implementation";
    ImplementationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    ImplementationRequest2.type = new messages_1.ProtocolRequestType(ImplementationRequest2.method);
    ImplementationRequest2.capabilities = messages_1.CM.create("textDocument.implementation", "implementationProvider");
  })(ImplementationRequest || (exports2.ImplementationRequest = ImplementationRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeDefinition.js
var require_protocol_typeDefinition = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TypeDefinitionRequest = undefined;
  var messages_1 = require_messages2();
  var TypeDefinitionRequest;
  (function(TypeDefinitionRequest2) {
    TypeDefinitionRequest2.method = "textDocument/typeDefinition";
    TypeDefinitionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    TypeDefinitionRequest2.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest2.method);
    TypeDefinitionRequest2.capabilities = messages_1.CM.create("textDocument.typeDefinition", "typeDefinitionProvider");
  })(TypeDefinitionRequest || (exports2.TypeDefinitionRequest = TypeDefinitionRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.workspaceFolder.js
var require_protocol_workspaceFolder = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = undefined;
  var messages_1 = require_messages2();
  var WorkspaceFoldersRequest;
  (function(WorkspaceFoldersRequest2) {
    WorkspaceFoldersRequest2.method = "workspace/workspaceFolders";
    WorkspaceFoldersRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    WorkspaceFoldersRequest2.type = new messages_1.ProtocolRequestType0(WorkspaceFoldersRequest2.method);
    WorkspaceFoldersRequest2.capabilities = messages_1.CM.create("workspace.workspaceFolders", "workspace.workspaceFolders");
  })(WorkspaceFoldersRequest || (exports2.WorkspaceFoldersRequest = WorkspaceFoldersRequest = {}));
  var DidChangeWorkspaceFoldersNotification;
  (function(DidChangeWorkspaceFoldersNotification2) {
    DidChangeWorkspaceFoldersNotification2.method = "workspace/didChangeWorkspaceFolders";
    DidChangeWorkspaceFoldersNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidChangeWorkspaceFoldersNotification2.type = new messages_1.ProtocolNotificationType(DidChangeWorkspaceFoldersNotification2.method);
    DidChangeWorkspaceFoldersNotification2.capabilities = messages_1.CM.create(undefined, "workspace.workspaceFolders.changeNotifications");
  })(DidChangeWorkspaceFoldersNotification || (exports2.DidChangeWorkspaceFoldersNotification = DidChangeWorkspaceFoldersNotification = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.configuration.js
var require_protocol_configuration = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ConfigurationRequest = undefined;
  var messages_1 = require_messages2();
  var ConfigurationRequest;
  (function(ConfigurationRequest2) {
    ConfigurationRequest2.method = "workspace/configuration";
    ConfigurationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    ConfigurationRequest2.type = new messages_1.ProtocolRequestType(ConfigurationRequest2.method);
    ConfigurationRequest2.capabilities = messages_1.CM.create("workspace.configuration", undefined);
  })(ConfigurationRequest || (exports2.ConfigurationRequest = ConfigurationRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.colorProvider.js
var require_protocol_colorProvider = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ColorPresentationRequest = exports2.DocumentColorRequest = undefined;
  var messages_1 = require_messages2();
  var DocumentColorRequest;
  (function(DocumentColorRequest2) {
    DocumentColorRequest2.method = "textDocument/documentColor";
    DocumentColorRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentColorRequest2.type = new messages_1.ProtocolRequestType(DocumentColorRequest2.method);
    DocumentColorRequest2.capabilities = messages_1.CM.create("textDocument.colorProvider", "colorProvider");
  })(DocumentColorRequest || (exports2.DocumentColorRequest = DocumentColorRequest = {}));
  var ColorPresentationRequest;
  (function(ColorPresentationRequest2) {
    ColorPresentationRequest2.method = "textDocument/colorPresentation";
    ColorPresentationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    ColorPresentationRequest2.type = new messages_1.ProtocolRequestType(ColorPresentationRequest2.method);
    ColorPresentationRequest2.capabilities = messages_1.CM.create("textDocument.colorProvider", "colorProvider");
  })(ColorPresentationRequest || (exports2.ColorPresentationRequest = ColorPresentationRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.foldingRange.js
var require_protocol_foldingRange = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.FoldingRangeRefreshRequest = exports2.FoldingRangeRequest = undefined;
  var messages_1 = require_messages2();
  var FoldingRangeRequest;
  (function(FoldingRangeRequest2) {
    FoldingRangeRequest2.method = "textDocument/foldingRange";
    FoldingRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    FoldingRangeRequest2.type = new messages_1.ProtocolRequestType(FoldingRangeRequest2.method);
    FoldingRangeRequest2.capabilities = messages_1.CM.create("textDocument.foldingRange", "foldingRangeProvider");
  })(FoldingRangeRequest || (exports2.FoldingRangeRequest = FoldingRangeRequest = {}));
  var FoldingRangeRefreshRequest;
  (function(FoldingRangeRefreshRequest2) {
    FoldingRangeRefreshRequest2.method = `workspace/foldingRange/refresh`;
    FoldingRangeRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    FoldingRangeRefreshRequest2.type = new messages_1.ProtocolRequestType0(FoldingRangeRefreshRequest2.method);
    FoldingRangeRefreshRequest2.capabilities = messages_1.CM.create("workspace.foldingRange.refreshSupport", undefined);
  })(FoldingRangeRefreshRequest || (exports2.FoldingRangeRefreshRequest = FoldingRangeRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.declaration.js
var require_protocol_declaration = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DeclarationRequest = undefined;
  var messages_1 = require_messages2();
  var DeclarationRequest;
  (function(DeclarationRequest2) {
    DeclarationRequest2.method = "textDocument/declaration";
    DeclarationRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DeclarationRequest2.type = new messages_1.ProtocolRequestType(DeclarationRequest2.method);
    DeclarationRequest2.capabilities = messages_1.CM.create("textDocument.declaration", "declarationProvider");
  })(DeclarationRequest || (exports2.DeclarationRequest = DeclarationRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.selectionRange.js
var require_protocol_selectionRange = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SelectionRangeRequest = undefined;
  var messages_1 = require_messages2();
  var SelectionRangeRequest;
  (function(SelectionRangeRequest2) {
    SelectionRangeRequest2.method = "textDocument/selectionRange";
    SelectionRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    SelectionRangeRequest2.type = new messages_1.ProtocolRequestType(SelectionRangeRequest2.method);
    SelectionRangeRequest2.capabilities = messages_1.CM.create("textDocument.selectionRange", "selectionRangeProvider");
  })(SelectionRangeRequest || (exports2.SelectionRangeRequest = SelectionRangeRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.progress.js
var require_protocol_progress = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = undefined;
  var vscode_jsonrpc_1 = require_api();
  var messages_1 = require_messages2();
  var WorkDoneProgress;
  (function(WorkDoneProgress2) {
    WorkDoneProgress2.type = new vscode_jsonrpc_1.ProgressType;
    function is(value) {
      return value === WorkDoneProgress2.type;
    }
    WorkDoneProgress2.is = is;
  })(WorkDoneProgress || (exports2.WorkDoneProgress = WorkDoneProgress = {}));
  var WorkDoneProgressCreateRequest;
  (function(WorkDoneProgressCreateRequest2) {
    WorkDoneProgressCreateRequest2.method = "window/workDoneProgress/create";
    WorkDoneProgressCreateRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    WorkDoneProgressCreateRequest2.type = new messages_1.ProtocolRequestType(WorkDoneProgressCreateRequest2.method);
    WorkDoneProgressCreateRequest2.capabilities = messages_1.CM.create("window.workDoneProgress", undefined);
  })(WorkDoneProgressCreateRequest || (exports2.WorkDoneProgressCreateRequest = WorkDoneProgressCreateRequest = {}));
  var WorkDoneProgressCancelNotification;
  (function(WorkDoneProgressCancelNotification2) {
    WorkDoneProgressCancelNotification2.method = "window/workDoneProgress/cancel";
    WorkDoneProgressCancelNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    WorkDoneProgressCancelNotification2.type = new messages_1.ProtocolNotificationType(WorkDoneProgressCancelNotification2.method);
  })(WorkDoneProgressCancelNotification || (exports2.WorkDoneProgressCancelNotification = WorkDoneProgressCancelNotification = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.callHierarchy.js
var require_protocol_callHierarchy = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.CallHierarchyPrepareRequest = undefined;
  var messages_1 = require_messages2();
  var CallHierarchyPrepareRequest;
  (function(CallHierarchyPrepareRequest2) {
    CallHierarchyPrepareRequest2.method = "textDocument/prepareCallHierarchy";
    CallHierarchyPrepareRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CallHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest2.method);
    CallHierarchyPrepareRequest2.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
  })(CallHierarchyPrepareRequest || (exports2.CallHierarchyPrepareRequest = CallHierarchyPrepareRequest = {}));
  var CallHierarchyIncomingCallsRequest;
  (function(CallHierarchyIncomingCallsRequest2) {
    CallHierarchyIncomingCallsRequest2.method = "callHierarchy/incomingCalls";
    CallHierarchyIncomingCallsRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CallHierarchyIncomingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest2.method);
    CallHierarchyIncomingCallsRequest2.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
  })(CallHierarchyIncomingCallsRequest || (exports2.CallHierarchyIncomingCallsRequest = CallHierarchyIncomingCallsRequest = {}));
  var CallHierarchyOutgoingCallsRequest;
  (function(CallHierarchyOutgoingCallsRequest2) {
    CallHierarchyOutgoingCallsRequest2.method = "callHierarchy/outgoingCalls";
    CallHierarchyOutgoingCallsRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CallHierarchyOutgoingCallsRequest2.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest2.method);
    CallHierarchyOutgoingCallsRequest2.capabilities = messages_1.CM.create("textDocument.callHierarchy", "callHierarchyProvider");
  })(CallHierarchyOutgoingCallsRequest || (exports2.CallHierarchyOutgoingCallsRequest = CallHierarchyOutgoingCallsRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.semanticTokens.js
var require_protocol_semanticTokens = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.SemanticTokensRegistrationType = exports2.TokenFormat = undefined;
  var messages_1 = require_messages2();
  var TokenFormat;
  (function(TokenFormat2) {
    TokenFormat2.Relative = "relative";
  })(TokenFormat || (exports2.TokenFormat = TokenFormat = {}));
  var SemanticTokensRegistrationType;
  (function(SemanticTokensRegistrationType2) {
    SemanticTokensRegistrationType2.method = "textDocument/semanticTokens";
    SemanticTokensRegistrationType2.type = new messages_1.RegistrationType(SemanticTokensRegistrationType2.method);
  })(SemanticTokensRegistrationType || (exports2.SemanticTokensRegistrationType = SemanticTokensRegistrationType = {}));
  var SemanticTokensRequest;
  (function(SemanticTokensRequest2) {
    SemanticTokensRequest2.method = "textDocument/semanticTokens/full";
    SemanticTokensRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    SemanticTokensRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRequest2.method);
    SemanticTokensRequest2.registrationMethod = SemanticTokensRegistrationType.method;
    SemanticTokensRequest2.capabilities = messages_1.CM.create("textDocument.semanticTokens", "semanticTokensProvider");
  })(SemanticTokensRequest || (exports2.SemanticTokensRequest = SemanticTokensRequest = {}));
  var SemanticTokensDeltaRequest;
  (function(SemanticTokensDeltaRequest2) {
    SemanticTokensDeltaRequest2.method = "textDocument/semanticTokens/full/delta";
    SemanticTokensDeltaRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    SemanticTokensDeltaRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest2.method);
    SemanticTokensDeltaRequest2.registrationMethod = SemanticTokensRegistrationType.method;
    SemanticTokensDeltaRequest2.capabilities = messages_1.CM.create("textDocument.semanticTokens.requests.full.delta", "semanticTokensProvider.full.delta");
  })(SemanticTokensDeltaRequest || (exports2.SemanticTokensDeltaRequest = SemanticTokensDeltaRequest = {}));
  var SemanticTokensRangeRequest;
  (function(SemanticTokensRangeRequest2) {
    SemanticTokensRangeRequest2.method = "textDocument/semanticTokens/range";
    SemanticTokensRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    SemanticTokensRangeRequest2.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest2.method);
    SemanticTokensRangeRequest2.registrationMethod = SemanticTokensRegistrationType.method;
    SemanticTokensRangeRequest2.capabilities = messages_1.CM.create("textDocument.semanticTokens.requests.range", "semanticTokensProvider.range");
  })(SemanticTokensRangeRequest || (exports2.SemanticTokensRangeRequest = SemanticTokensRangeRequest = {}));
  var SemanticTokensRefreshRequest;
  (function(SemanticTokensRefreshRequest2) {
    SemanticTokensRefreshRequest2.method = `workspace/semanticTokens/refresh`;
    SemanticTokensRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    SemanticTokensRefreshRequest2.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest2.method);
    SemanticTokensRefreshRequest2.capabilities = messages_1.CM.create("workspace.semanticTokens.refreshSupport", undefined);
  })(SemanticTokensRefreshRequest || (exports2.SemanticTokensRefreshRequest = SemanticTokensRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.showDocument.js
var require_protocol_showDocument = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ShowDocumentRequest = undefined;
  var messages_1 = require_messages2();
  var ShowDocumentRequest;
  (function(ShowDocumentRequest2) {
    ShowDocumentRequest2.method = "window/showDocument";
    ShowDocumentRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    ShowDocumentRequest2.type = new messages_1.ProtocolRequestType(ShowDocumentRequest2.method);
    ShowDocumentRequest2.capabilities = messages_1.CM.create("window.showDocument.support", undefined);
  })(ShowDocumentRequest || (exports2.ShowDocumentRequest = ShowDocumentRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.linkedEditingRange.js
var require_protocol_linkedEditingRange = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.LinkedEditingRangeRequest = undefined;
  var messages_1 = require_messages2();
  var LinkedEditingRangeRequest;
  (function(LinkedEditingRangeRequest2) {
    LinkedEditingRangeRequest2.method = "textDocument/linkedEditingRange";
    LinkedEditingRangeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    LinkedEditingRangeRequest2.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest2.method);
    LinkedEditingRangeRequest2.capabilities = messages_1.CM.create("textDocument.linkedEditingRange", "linkedEditingRangeProvider");
  })(LinkedEditingRangeRequest || (exports2.LinkedEditingRangeRequest = LinkedEditingRangeRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.fileOperations.js
var require_protocol_fileOperations = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.DidRenameFilesNotification = exports2.WillRenameFilesRequest = exports2.DidCreateFilesNotification = exports2.WillCreateFilesRequest = exports2.FileOperationPatternKind = undefined;
  var messages_1 = require_messages2();
  var FileOperationPatternKind;
  (function(FileOperationPatternKind2) {
    FileOperationPatternKind2.file = "file";
    FileOperationPatternKind2.folder = "folder";
  })(FileOperationPatternKind || (exports2.FileOperationPatternKind = FileOperationPatternKind = {}));
  var WillCreateFilesRequest;
  (function(WillCreateFilesRequest2) {
    WillCreateFilesRequest2.method = "workspace/willCreateFiles";
    WillCreateFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WillCreateFilesRequest2.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest2.method);
    WillCreateFilesRequest2.capabilities = messages_1.CM.create("workspace.fileOperations.willCreate", "workspace.fileOperations.willCreate");
  })(WillCreateFilesRequest || (exports2.WillCreateFilesRequest = WillCreateFilesRequest = {}));
  var DidCreateFilesNotification;
  (function(DidCreateFilesNotification2) {
    DidCreateFilesNotification2.method = "workspace/didCreateFiles";
    DidCreateFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidCreateFilesNotification2.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification2.method);
    DidCreateFilesNotification2.capabilities = messages_1.CM.create("workspace.fileOperations.didCreate", "workspace.fileOperations.didCreate");
  })(DidCreateFilesNotification || (exports2.DidCreateFilesNotification = DidCreateFilesNotification = {}));
  var WillRenameFilesRequest;
  (function(WillRenameFilesRequest2) {
    WillRenameFilesRequest2.method = "workspace/willRenameFiles";
    WillRenameFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WillRenameFilesRequest2.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest2.method);
    WillRenameFilesRequest2.capabilities = messages_1.CM.create("workspace.fileOperations.willRename", "workspace.fileOperations.willRename");
  })(WillRenameFilesRequest || (exports2.WillRenameFilesRequest = WillRenameFilesRequest = {}));
  var DidRenameFilesNotification;
  (function(DidRenameFilesNotification2) {
    DidRenameFilesNotification2.method = "workspace/didRenameFiles";
    DidRenameFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidRenameFilesNotification2.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification2.method);
    DidRenameFilesNotification2.capabilities = messages_1.CM.create("workspace.fileOperations.didRename", "workspace.fileOperations.didRename");
  })(DidRenameFilesNotification || (exports2.DidRenameFilesNotification = DidRenameFilesNotification = {}));
  var DidDeleteFilesNotification;
  (function(DidDeleteFilesNotification2) {
    DidDeleteFilesNotification2.method = "workspace/didDeleteFiles";
    DidDeleteFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidDeleteFilesNotification2.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification2.method);
    DidDeleteFilesNotification2.capabilities = messages_1.CM.create("workspace.fileOperations.didDelete", "workspace.fileOperations.didDelete");
  })(DidDeleteFilesNotification || (exports2.DidDeleteFilesNotification = DidDeleteFilesNotification = {}));
  var WillDeleteFilesRequest;
  (function(WillDeleteFilesRequest2) {
    WillDeleteFilesRequest2.method = "workspace/willDeleteFiles";
    WillDeleteFilesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WillDeleteFilesRequest2.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest2.method);
    WillDeleteFilesRequest2.capabilities = messages_1.CM.create("workspace.fileOperations.willDelete", "workspace.fileOperations.willDelete");
  })(WillDeleteFilesRequest || (exports2.WillDeleteFilesRequest = WillDeleteFilesRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.moniker.js
var require_protocol_moniker = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.MonikerRequest = exports2.MonikerKind = exports2.UniquenessLevel = undefined;
  var messages_1 = require_messages2();
  var UniquenessLevel;
  (function(UniquenessLevel2) {
    UniquenessLevel2.document = "document";
    UniquenessLevel2.project = "project";
    UniquenessLevel2.group = "group";
    UniquenessLevel2.scheme = "scheme";
    UniquenessLevel2.global = "global";
  })(UniquenessLevel || (exports2.UniquenessLevel = UniquenessLevel = {}));
  var MonikerKind;
  (function(MonikerKind2) {
    MonikerKind2.$import = "import";
    MonikerKind2.$export = "export";
    MonikerKind2.local = "local";
  })(MonikerKind || (exports2.MonikerKind = MonikerKind = {}));
  var MonikerRequest;
  (function(MonikerRequest2) {
    MonikerRequest2.method = "textDocument/moniker";
    MonikerRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    MonikerRequest2.type = new messages_1.ProtocolRequestType(MonikerRequest2.method);
    MonikerRequest2.capabilities = messages_1.CM.create("textDocument.moniker", "monikerProvider");
  })(MonikerRequest || (exports2.MonikerRequest = MonikerRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.typeHierarchy.js
var require_protocol_typeHierarchy = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TypeHierarchySubtypesRequest = exports2.TypeHierarchySupertypesRequest = exports2.TypeHierarchyPrepareRequest = undefined;
  var messages_1 = require_messages2();
  var TypeHierarchyPrepareRequest;
  (function(TypeHierarchyPrepareRequest2) {
    TypeHierarchyPrepareRequest2.method = "textDocument/prepareTypeHierarchy";
    TypeHierarchyPrepareRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    TypeHierarchyPrepareRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchyPrepareRequest2.method);
    TypeHierarchyPrepareRequest2.capabilities = messages_1.CM.create("textDocument.typeHierarchy", "typeHierarchyProvider");
  })(TypeHierarchyPrepareRequest || (exports2.TypeHierarchyPrepareRequest = TypeHierarchyPrepareRequest = {}));
  var TypeHierarchySupertypesRequest;
  (function(TypeHierarchySupertypesRequest2) {
    TypeHierarchySupertypesRequest2.method = "typeHierarchy/supertypes";
    TypeHierarchySupertypesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    TypeHierarchySupertypesRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchySupertypesRequest2.method);
  })(TypeHierarchySupertypesRequest || (exports2.TypeHierarchySupertypesRequest = TypeHierarchySupertypesRequest = {}));
  var TypeHierarchySubtypesRequest;
  (function(TypeHierarchySubtypesRequest2) {
    TypeHierarchySubtypesRequest2.method = "typeHierarchy/subtypes";
    TypeHierarchySubtypesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    TypeHierarchySubtypesRequest2.type = new messages_1.ProtocolRequestType(TypeHierarchySubtypesRequest2.method);
  })(TypeHierarchySubtypesRequest || (exports2.TypeHierarchySubtypesRequest = TypeHierarchySubtypesRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineValue.js
var require_protocol_inlineValue = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlineValueRefreshRequest = exports2.InlineValueRequest = undefined;
  var messages_1 = require_messages2();
  var InlineValueRequest;
  (function(InlineValueRequest2) {
    InlineValueRequest2.method = "textDocument/inlineValue";
    InlineValueRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    InlineValueRequest2.type = new messages_1.ProtocolRequestType(InlineValueRequest2.method);
    InlineValueRequest2.capabilities = messages_1.CM.create("textDocument.inlineValue", "inlineValueProvider");
  })(InlineValueRequest || (exports2.InlineValueRequest = InlineValueRequest = {}));
  var InlineValueRefreshRequest;
  (function(InlineValueRefreshRequest2) {
    InlineValueRefreshRequest2.method = `workspace/inlineValue/refresh`;
    InlineValueRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    InlineValueRefreshRequest2.type = new messages_1.ProtocolRequestType0(InlineValueRefreshRequest2.method);
    InlineValueRefreshRequest2.capabilities = messages_1.CM.create("workspace.inlineValue.refreshSupport", undefined);
  })(InlineValueRefreshRequest || (exports2.InlineValueRefreshRequest = InlineValueRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlayHint.js
var require_protocol_inlayHint = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlayHintRefreshRequest = exports2.InlayHintResolveRequest = exports2.InlayHintRequest = undefined;
  var messages_1 = require_messages2();
  var InlayHintRequest;
  (function(InlayHintRequest2) {
    InlayHintRequest2.method = "textDocument/inlayHint";
    InlayHintRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    InlayHintRequest2.type = new messages_1.ProtocolRequestType(InlayHintRequest2.method);
    InlayHintRequest2.capabilities = messages_1.CM.create("textDocument.inlayHint", "inlayHintProvider");
  })(InlayHintRequest || (exports2.InlayHintRequest = InlayHintRequest = {}));
  var InlayHintResolveRequest;
  (function(InlayHintResolveRequest2) {
    InlayHintResolveRequest2.method = "inlayHint/resolve";
    InlayHintResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    InlayHintResolveRequest2.type = new messages_1.ProtocolRequestType(InlayHintResolveRequest2.method);
    InlayHintResolveRequest2.capabilities = messages_1.CM.create("textDocument.inlayHint.resolveSupport", "inlayHintProvider.resolveProvider");
  })(InlayHintResolveRequest || (exports2.InlayHintResolveRequest = InlayHintResolveRequest = {}));
  var InlayHintRefreshRequest;
  (function(InlayHintRefreshRequest2) {
    InlayHintRefreshRequest2.method = `workspace/inlayHint/refresh`;
    InlayHintRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    InlayHintRefreshRequest2.type = new messages_1.ProtocolRequestType0(InlayHintRefreshRequest2.method);
    InlayHintRefreshRequest2.capabilities = messages_1.CM.create("workspace.inlayHint.refreshSupport", undefined);
  })(InlayHintRefreshRequest || (exports2.InlayHintRefreshRequest = InlayHintRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.diagnostic.js
var require_protocol_diagnostic = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DiagnosticRefreshRequest = exports2.WorkspaceDiagnosticRequest = exports2.DocumentDiagnosticRequest = exports2.DocumentDiagnosticReportKind = exports2.DiagnosticServerCancellationData = undefined;
  var vscode_jsonrpc_1 = require_api();
  var Is = __importStar(require_is3());
  var messages_1 = require_messages2();
  var DiagnosticServerCancellationData;
  (function(DiagnosticServerCancellationData2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.boolean(candidate.retriggerRequest);
    }
    DiagnosticServerCancellationData2.is = is;
  })(DiagnosticServerCancellationData || (exports2.DiagnosticServerCancellationData = DiagnosticServerCancellationData = {}));
  var DocumentDiagnosticReportKind;
  (function(DocumentDiagnosticReportKind2) {
    DocumentDiagnosticReportKind2.Full = "full";
    DocumentDiagnosticReportKind2.Unchanged = "unchanged";
  })(DocumentDiagnosticReportKind || (exports2.DocumentDiagnosticReportKind = DocumentDiagnosticReportKind = {}));
  var DocumentDiagnosticRequest;
  (function(DocumentDiagnosticRequest2) {
    DocumentDiagnosticRequest2.method = "textDocument/diagnostic";
    DocumentDiagnosticRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentDiagnosticRequest2.type = new messages_1.ProtocolRequestType(DocumentDiagnosticRequest2.method);
    DocumentDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType;
    DocumentDiagnosticRequest2.capabilities = messages_1.CM.create("textDocument.diagnostic", "diagnosticProvider");
  })(DocumentDiagnosticRequest || (exports2.DocumentDiagnosticRequest = DocumentDiagnosticRequest = {}));
  var WorkspaceDiagnosticRequest;
  (function(WorkspaceDiagnosticRequest2) {
    WorkspaceDiagnosticRequest2.method = "workspace/diagnostic";
    WorkspaceDiagnosticRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WorkspaceDiagnosticRequest2.type = new messages_1.ProtocolRequestType(WorkspaceDiagnosticRequest2.method);
    WorkspaceDiagnosticRequest2.partialResult = new vscode_jsonrpc_1.ProgressType;
    WorkspaceDiagnosticRequest2.capabilities = messages_1.CM.create("workspace.diagnostics", "diagnosticProvider.workspaceDiagnostics");
  })(WorkspaceDiagnosticRequest || (exports2.WorkspaceDiagnosticRequest = WorkspaceDiagnosticRequest = {}));
  var DiagnosticRefreshRequest;
  (function(DiagnosticRefreshRequest2) {
    DiagnosticRefreshRequest2.method = `workspace/diagnostic/refresh`;
    DiagnosticRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    DiagnosticRefreshRequest2.type = new messages_1.ProtocolRequestType0(DiagnosticRefreshRequest2.method);
    DiagnosticRefreshRequest2.capabilities = messages_1.CM.create("workspace.diagnostics.refreshSupport", undefined);
  })(DiagnosticRefreshRequest || (exports2.DiagnosticRefreshRequest = DiagnosticRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.notebook.js
var require_protocol_notebook = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DidCloseNotebookDocumentNotification = exports2.DidSaveNotebookDocumentNotification = exports2.DidChangeNotebookDocumentNotification = exports2.NotebookCellArrayChange = exports2.DidOpenNotebookDocumentNotification = exports2.NotebookDocumentSyncRegistrationType = exports2.NotebookDocument = exports2.NotebookCell = exports2.ExecutionSummary = exports2.NotebookCellKind = undefined;
  var vscode_languageserver_types_1 = require_main();
  var Is = __importStar(require_is3());
  var messages_1 = require_messages2();
  var NotebookCellKind;
  (function(NotebookCellKind2) {
    NotebookCellKind2.Markup = 1;
    NotebookCellKind2.Code = 2;
    function is(value) {
      return value === 1 || value === 2;
    }
    NotebookCellKind2.is = is;
  })(NotebookCellKind || (exports2.NotebookCellKind = NotebookCellKind = {}));
  var ExecutionSummary;
  (function(ExecutionSummary2) {
    function create(executionOrder, success) {
      const result = { executionOrder };
      if (success === true || success === false) {
        result.success = success;
      }
      return result;
    }
    ExecutionSummary2.create = create;
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.executionOrder) && (candidate.success === undefined || Is.boolean(candidate.success));
    }
    ExecutionSummary2.is = is;
    function equals(one, other) {
      if (one === other) {
        return true;
      }
      if (one === null || one === undefined || other === null || other === undefined) {
        return false;
      }
      return one.executionOrder === other.executionOrder && one.success === other.success;
    }
    ExecutionSummary2.equals = equals;
  })(ExecutionSummary || (exports2.ExecutionSummary = ExecutionSummary = {}));
  var NotebookCell;
  (function(NotebookCell2) {
    function create(kind, document) {
      return { kind, document };
    }
    NotebookCell2.create = create;
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && NotebookCellKind.is(candidate.kind) && vscode_languageserver_types_1.DocumentUri.is(candidate.document) && (candidate.metadata === undefined || Is.objectLiteral(candidate.metadata));
    }
    NotebookCell2.is = is;
    function diff(one, two) {
      const result = new Set;
      if (one.document !== two.document) {
        result.add("document");
      }
      if (one.kind !== two.kind) {
        result.add("kind");
      }
      if (one.executionSummary !== two.executionSummary) {
        result.add("executionSummary");
      }
      if ((one.metadata !== undefined || two.metadata !== undefined) && !equalsMetadata(one.metadata, two.metadata)) {
        result.add("metadata");
      }
      if ((one.executionSummary !== undefined || two.executionSummary !== undefined) && !ExecutionSummary.equals(one.executionSummary, two.executionSummary)) {
        result.add("executionSummary");
      }
      return result;
    }
    NotebookCell2.diff = diff;
    function equalsMetadata(one, other) {
      if (one === other) {
        return true;
      }
      if (one === null || one === undefined || other === null || other === undefined) {
        return false;
      }
      if (typeof one !== typeof other) {
        return false;
      }
      if (typeof one !== "object") {
        return false;
      }
      const oneArray = Array.isArray(one);
      const otherArray = Array.isArray(other);
      if (oneArray !== otherArray) {
        return false;
      }
      if (oneArray && otherArray) {
        if (one.length !== other.length) {
          return false;
        }
        for (let i = 0;i < one.length; i++) {
          if (!equalsMetadata(one[i], other[i])) {
            return false;
          }
        }
      }
      if (Is.objectLiteral(one) && Is.objectLiteral(other)) {
        const oneKeys = Object.keys(one);
        const otherKeys = Object.keys(other);
        if (oneKeys.length !== otherKeys.length) {
          return false;
        }
        oneKeys.sort();
        otherKeys.sort();
        if (!equalsMetadata(oneKeys, otherKeys)) {
          return false;
        }
        for (let i = 0;i < oneKeys.length; i++) {
          const prop = oneKeys[i];
          if (!equalsMetadata(one[prop], other[prop])) {
            return false;
          }
        }
      }
      return true;
    }
  })(NotebookCell || (exports2.NotebookCell = NotebookCell = {}));
  var NotebookDocument;
  (function(NotebookDocument2) {
    function create(uri, notebookType, version, cells) {
      return { uri, notebookType, version, cells };
    }
    NotebookDocument2.create = create;
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && Is.string(candidate.uri) && vscode_languageserver_types_1.integer.is(candidate.version) && Is.typedArray(candidate.cells, NotebookCell.is);
    }
    NotebookDocument2.is = is;
  })(NotebookDocument || (exports2.NotebookDocument = NotebookDocument = {}));
  var NotebookDocumentSyncRegistrationType;
  (function(NotebookDocumentSyncRegistrationType2) {
    NotebookDocumentSyncRegistrationType2.method = "notebookDocument/sync";
    NotebookDocumentSyncRegistrationType2.messageDirection = messages_1.MessageDirection.clientToServer;
    NotebookDocumentSyncRegistrationType2.type = new messages_1.RegistrationType(NotebookDocumentSyncRegistrationType2.method);
  })(NotebookDocumentSyncRegistrationType || (exports2.NotebookDocumentSyncRegistrationType = NotebookDocumentSyncRegistrationType = {}));
  var DidOpenNotebookDocumentNotification;
  (function(DidOpenNotebookDocumentNotification2) {
    DidOpenNotebookDocumentNotification2.method = "notebookDocument/didOpen";
    DidOpenNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidOpenNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenNotebookDocumentNotification2.method);
    DidOpenNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
  })(DidOpenNotebookDocumentNotification || (exports2.DidOpenNotebookDocumentNotification = DidOpenNotebookDocumentNotification = {}));
  var NotebookCellArrayChange;
  (function(NotebookCellArrayChange2) {
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && vscode_languageserver_types_1.uinteger.is(candidate.start) && vscode_languageserver_types_1.uinteger.is(candidate.deleteCount) && (candidate.cells === undefined || Is.typedArray(candidate.cells, NotebookCell.is));
    }
    NotebookCellArrayChange2.is = is;
    function create(start, deleteCount, cells) {
      const result = { start, deleteCount };
      if (cells !== undefined) {
        result.cells = cells;
      }
      return result;
    }
    NotebookCellArrayChange2.create = create;
  })(NotebookCellArrayChange || (exports2.NotebookCellArrayChange = NotebookCellArrayChange = {}));
  var DidChangeNotebookDocumentNotification;
  (function(DidChangeNotebookDocumentNotification2) {
    DidChangeNotebookDocumentNotification2.method = "notebookDocument/didChange";
    DidChangeNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidChangeNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeNotebookDocumentNotification2.method);
    DidChangeNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
  })(DidChangeNotebookDocumentNotification || (exports2.DidChangeNotebookDocumentNotification = DidChangeNotebookDocumentNotification = {}));
  var DidSaveNotebookDocumentNotification;
  (function(DidSaveNotebookDocumentNotification2) {
    DidSaveNotebookDocumentNotification2.method = "notebookDocument/didSave";
    DidSaveNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidSaveNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveNotebookDocumentNotification2.method);
    DidSaveNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
  })(DidSaveNotebookDocumentNotification || (exports2.DidSaveNotebookDocumentNotification = DidSaveNotebookDocumentNotification = {}));
  var DidCloseNotebookDocumentNotification;
  (function(DidCloseNotebookDocumentNotification2) {
    DidCloseNotebookDocumentNotification2.method = "notebookDocument/didClose";
    DidCloseNotebookDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidCloseNotebookDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseNotebookDocumentNotification2.method);
    DidCloseNotebookDocumentNotification2.registrationMethod = NotebookDocumentSyncRegistrationType.method;
  })(DidCloseNotebookDocumentNotification || (exports2.DidCloseNotebookDocumentNotification = DidCloseNotebookDocumentNotification = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.inlineCompletion.js
var require_protocol_inlineCompletion = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlineCompletionRequest = undefined;
  var messages_1 = require_messages2();
  var InlineCompletionRequest;
  (function(InlineCompletionRequest2) {
    InlineCompletionRequest2.method = "textDocument/inlineCompletion";
    InlineCompletionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    InlineCompletionRequest2.type = new messages_1.ProtocolRequestType(InlineCompletionRequest2.method);
    InlineCompletionRequest2.capabilities = messages_1.CM.create("textDocument.inlineCompletion", "inlineCompletionProvider");
  })(InlineCompletionRequest || (exports2.InlineCompletionRequest = InlineCompletionRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.textDocumentContent.js
var require_protocol_textDocumentContent = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TextDocumentContentRefreshRequest = exports2.TextDocumentContentRequest = undefined;
  var messages_1 = require_messages2();
  var TextDocumentContentRequest;
  (function(TextDocumentContentRequest2) {
    TextDocumentContentRequest2.method = "workspace/textDocumentContent";
    TextDocumentContentRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    TextDocumentContentRequest2.type = new messages_1.ProtocolRequestType(TextDocumentContentRequest2.method);
    TextDocumentContentRequest2.capabilities = messages_1.CM.create("workspace.textDocumentContent", "workspace.textDocumentContent");
  })(TextDocumentContentRequest || (exports2.TextDocumentContentRequest = TextDocumentContentRequest = {}));
  var TextDocumentContentRefreshRequest;
  (function(TextDocumentContentRefreshRequest2) {
    TextDocumentContentRefreshRequest2.method = `workspace/textDocumentContent/refresh`;
    TextDocumentContentRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    TextDocumentContentRefreshRequest2.type = new messages_1.ProtocolRequestType(TextDocumentContentRefreshRequest2.method);
  })(TextDocumentContentRefreshRequest || (exports2.TextDocumentContentRefreshRequest = TextDocumentContentRefreshRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/protocol.js
var require_protocol = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CodeActionRequest = exports2.DocumentSymbolRequest = exports2.DocumentHighlightRequest = exports2.ReferencesRequest = exports2.DefinitionRequest = exports2.SignatureHelpRequest = exports2.SignatureHelpTriggerKind = exports2.HoverRequest = exports2.CompletionResolveRequest = exports2.CompletionRequest = exports2.CompletionTriggerKind = exports2.PublishDiagnosticsNotification = exports2.WatchKind = exports2.GlobPattern = exports2.RelativePattern = exports2.FileChangeType = exports2.DidChangeWatchedFilesNotification = exports2.WillSaveTextDocumentWaitUntilRequest = exports2.WillSaveTextDocumentNotification = exports2.TextDocumentSaveReason = exports2.DidSaveTextDocumentNotification = exports2.DidCloseTextDocumentNotification = exports2.DidChangeTextDocumentNotification = exports2.TextDocumentContentChangeEvent = exports2.DidOpenTextDocumentNotification = exports2.TextDocumentSyncKind = exports2.TelemetryEventNotification = exports2.LogMessageNotification = exports2.ShowMessageRequest = exports2.ShowMessageNotification = exports2.MessageType = exports2.DidChangeConfigurationNotification = exports2.ExitNotification = exports2.ShutdownRequest = exports2.InitializedNotification = exports2.InitializeErrorCodes = exports2.InitializeRequest = exports2.WorkDoneProgressOptions = exports2.TextDocumentRegistrationOptions = exports2.StaticRegistrationOptions = exports2.PositionEncodingKind = exports2.RegularExpressionEngineKind = exports2.FailureHandlingKind = exports2.ResourceOperationKind = exports2.UnregistrationRequest = exports2.RegistrationRequest = exports2.DocumentSelector = exports2.NotebookCellTextDocumentFilter = exports2.NotebookDocumentFilter = exports2.TextDocumentFilter = undefined;
  exports2.UniquenessLevel = exports2.WillDeleteFilesRequest = exports2.DidDeleteFilesNotification = exports2.WillRenameFilesRequest = exports2.DidRenameFilesNotification = exports2.WillCreateFilesRequest = exports2.DidCreateFilesNotification = exports2.FileOperationPatternKind = exports2.LinkedEditingRangeRequest = exports2.ShowDocumentRequest = exports2.SemanticTokensRegistrationType = exports2.SemanticTokensRefreshRequest = exports2.SemanticTokensRangeRequest = exports2.SemanticTokensDeltaRequest = exports2.SemanticTokensRequest = exports2.TokenFormat = exports2.CallHierarchyPrepareRequest = exports2.CallHierarchyOutgoingCallsRequest = exports2.CallHierarchyIncomingCallsRequest = exports2.WorkDoneProgressCancelNotification = exports2.WorkDoneProgressCreateRequest = exports2.WorkDoneProgress = exports2.SelectionRangeRequest = exports2.DeclarationRequest = exports2.FoldingRangeRefreshRequest = exports2.FoldingRangeRequest = exports2.ColorPresentationRequest = exports2.DocumentColorRequest = exports2.ConfigurationRequest = exports2.DidChangeWorkspaceFoldersNotification = exports2.WorkspaceFoldersRequest = exports2.TypeDefinitionRequest = exports2.ImplementationRequest = exports2.ApplyWorkspaceEditRequest = exports2.ExecuteCommandRequest = exports2.PrepareRenameRequest = exports2.RenameRequest = exports2.PrepareSupportDefaultBehavior = exports2.DocumentOnTypeFormattingRequest = exports2.DocumentRangesFormattingRequest = exports2.DocumentRangeFormattingRequest = exports2.DocumentFormattingRequest = exports2.DocumentLinkResolveRequest = exports2.DocumentLinkRequest = exports2.CodeLensRefreshRequest = exports2.CodeLensResolveRequest = exports2.CodeLensRequest = exports2.WorkspaceSymbolResolveRequest = exports2.WorkspaceSymbolRequest = exports2.CodeActionResolveRequest = undefined;
  exports2.TextDocumentContentRefreshRequest = exports2.TextDocumentContentRequest = exports2.InlineCompletionRequest = exports2.DidCloseNotebookDocumentNotification = exports2.DidSaveNotebookDocumentNotification = exports2.DidChangeNotebookDocumentNotification = exports2.NotebookCellArrayChange = exports2.DidOpenNotebookDocumentNotification = exports2.NotebookDocumentSyncRegistrationType = exports2.NotebookDocument = exports2.NotebookCell = exports2.ExecutionSummary = exports2.NotebookCellKind = exports2.DiagnosticRefreshRequest = exports2.WorkspaceDiagnosticRequest = exports2.DocumentDiagnosticRequest = exports2.DocumentDiagnosticReportKind = exports2.DiagnosticServerCancellationData = exports2.InlayHintRefreshRequest = exports2.InlayHintResolveRequest = exports2.InlayHintRequest = exports2.InlineValueRefreshRequest = exports2.InlineValueRequest = exports2.TypeHierarchySupertypesRequest = exports2.TypeHierarchySubtypesRequest = exports2.TypeHierarchyPrepareRequest = exports2.MonikerRequest = exports2.MonikerKind = undefined;
  var messages_1 = require_messages2();
  var vscode_languageserver_types_1 = require_main();
  var Is = __importStar(require_is3());
  var protocol_implementation_1 = require_protocol_implementation();
  Object.defineProperty(exports2, "ImplementationRequest", { enumerable: true, get: function() {
    return protocol_implementation_1.ImplementationRequest;
  } });
  var protocol_typeDefinition_1 = require_protocol_typeDefinition();
  Object.defineProperty(exports2, "TypeDefinitionRequest", { enumerable: true, get: function() {
    return protocol_typeDefinition_1.TypeDefinitionRequest;
  } });
  var protocol_workspaceFolder_1 = require_protocol_workspaceFolder();
  Object.defineProperty(exports2, "WorkspaceFoldersRequest", { enumerable: true, get: function() {
    return protocol_workspaceFolder_1.WorkspaceFoldersRequest;
  } });
  Object.defineProperty(exports2, "DidChangeWorkspaceFoldersNotification", { enumerable: true, get: function() {
    return protocol_workspaceFolder_1.DidChangeWorkspaceFoldersNotification;
  } });
  var protocol_configuration_1 = require_protocol_configuration();
  Object.defineProperty(exports2, "ConfigurationRequest", { enumerable: true, get: function() {
    return protocol_configuration_1.ConfigurationRequest;
  } });
  var protocol_colorProvider_1 = require_protocol_colorProvider();
  Object.defineProperty(exports2, "DocumentColorRequest", { enumerable: true, get: function() {
    return protocol_colorProvider_1.DocumentColorRequest;
  } });
  Object.defineProperty(exports2, "ColorPresentationRequest", { enumerable: true, get: function() {
    return protocol_colorProvider_1.ColorPresentationRequest;
  } });
  var protocol_foldingRange_1 = require_protocol_foldingRange();
  Object.defineProperty(exports2, "FoldingRangeRequest", { enumerable: true, get: function() {
    return protocol_foldingRange_1.FoldingRangeRequest;
  } });
  Object.defineProperty(exports2, "FoldingRangeRefreshRequest", { enumerable: true, get: function() {
    return protocol_foldingRange_1.FoldingRangeRefreshRequest;
  } });
  var protocol_declaration_1 = require_protocol_declaration();
  Object.defineProperty(exports2, "DeclarationRequest", { enumerable: true, get: function() {
    return protocol_declaration_1.DeclarationRequest;
  } });
  var protocol_selectionRange_1 = require_protocol_selectionRange();
  Object.defineProperty(exports2, "SelectionRangeRequest", { enumerable: true, get: function() {
    return protocol_selectionRange_1.SelectionRangeRequest;
  } });
  var protocol_progress_1 = require_protocol_progress();
  Object.defineProperty(exports2, "WorkDoneProgress", { enumerable: true, get: function() {
    return protocol_progress_1.WorkDoneProgress;
  } });
  Object.defineProperty(exports2, "WorkDoneProgressCreateRequest", { enumerable: true, get: function() {
    return protocol_progress_1.WorkDoneProgressCreateRequest;
  } });
  Object.defineProperty(exports2, "WorkDoneProgressCancelNotification", { enumerable: true, get: function() {
    return protocol_progress_1.WorkDoneProgressCancelNotification;
  } });
  var protocol_callHierarchy_1 = require_protocol_callHierarchy();
  Object.defineProperty(exports2, "CallHierarchyIncomingCallsRequest", { enumerable: true, get: function() {
    return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest;
  } });
  Object.defineProperty(exports2, "CallHierarchyOutgoingCallsRequest", { enumerable: true, get: function() {
    return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest;
  } });
  Object.defineProperty(exports2, "CallHierarchyPrepareRequest", { enumerable: true, get: function() {
    return protocol_callHierarchy_1.CallHierarchyPrepareRequest;
  } });
  var protocol_semanticTokens_1 = require_protocol_semanticTokens();
  Object.defineProperty(exports2, "TokenFormat", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.TokenFormat;
  } });
  Object.defineProperty(exports2, "SemanticTokensRequest", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.SemanticTokensRequest;
  } });
  Object.defineProperty(exports2, "SemanticTokensDeltaRequest", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.SemanticTokensDeltaRequest;
  } });
  Object.defineProperty(exports2, "SemanticTokensRangeRequest", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.SemanticTokensRangeRequest;
  } });
  Object.defineProperty(exports2, "SemanticTokensRefreshRequest", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.SemanticTokensRefreshRequest;
  } });
  Object.defineProperty(exports2, "SemanticTokensRegistrationType", { enumerable: true, get: function() {
    return protocol_semanticTokens_1.SemanticTokensRegistrationType;
  } });
  var protocol_showDocument_1 = require_protocol_showDocument();
  Object.defineProperty(exports2, "ShowDocumentRequest", { enumerable: true, get: function() {
    return protocol_showDocument_1.ShowDocumentRequest;
  } });
  var protocol_linkedEditingRange_1 = require_protocol_linkedEditingRange();
  Object.defineProperty(exports2, "LinkedEditingRangeRequest", { enumerable: true, get: function() {
    return protocol_linkedEditingRange_1.LinkedEditingRangeRequest;
  } });
  var protocol_fileOperations_1 = require_protocol_fileOperations();
  Object.defineProperty(exports2, "FileOperationPatternKind", { enumerable: true, get: function() {
    return protocol_fileOperations_1.FileOperationPatternKind;
  } });
  Object.defineProperty(exports2, "DidCreateFilesNotification", { enumerable: true, get: function() {
    return protocol_fileOperations_1.DidCreateFilesNotification;
  } });
  Object.defineProperty(exports2, "WillCreateFilesRequest", { enumerable: true, get: function() {
    return protocol_fileOperations_1.WillCreateFilesRequest;
  } });
  Object.defineProperty(exports2, "DidRenameFilesNotification", { enumerable: true, get: function() {
    return protocol_fileOperations_1.DidRenameFilesNotification;
  } });
  Object.defineProperty(exports2, "WillRenameFilesRequest", { enumerable: true, get: function() {
    return protocol_fileOperations_1.WillRenameFilesRequest;
  } });
  Object.defineProperty(exports2, "DidDeleteFilesNotification", { enumerable: true, get: function() {
    return protocol_fileOperations_1.DidDeleteFilesNotification;
  } });
  Object.defineProperty(exports2, "WillDeleteFilesRequest", { enumerable: true, get: function() {
    return protocol_fileOperations_1.WillDeleteFilesRequest;
  } });
  var protocol_moniker_1 = require_protocol_moniker();
  Object.defineProperty(exports2, "UniquenessLevel", { enumerable: true, get: function() {
    return protocol_moniker_1.UniquenessLevel;
  } });
  Object.defineProperty(exports2, "MonikerKind", { enumerable: true, get: function() {
    return protocol_moniker_1.MonikerKind;
  } });
  Object.defineProperty(exports2, "MonikerRequest", { enumerable: true, get: function() {
    return protocol_moniker_1.MonikerRequest;
  } });
  var protocol_typeHierarchy_1 = require_protocol_typeHierarchy();
  Object.defineProperty(exports2, "TypeHierarchyPrepareRequest", { enumerable: true, get: function() {
    return protocol_typeHierarchy_1.TypeHierarchyPrepareRequest;
  } });
  Object.defineProperty(exports2, "TypeHierarchySubtypesRequest", { enumerable: true, get: function() {
    return protocol_typeHierarchy_1.TypeHierarchySubtypesRequest;
  } });
  Object.defineProperty(exports2, "TypeHierarchySupertypesRequest", { enumerable: true, get: function() {
    return protocol_typeHierarchy_1.TypeHierarchySupertypesRequest;
  } });
  var protocol_inlineValue_1 = require_protocol_inlineValue();
  Object.defineProperty(exports2, "InlineValueRequest", { enumerable: true, get: function() {
    return protocol_inlineValue_1.InlineValueRequest;
  } });
  Object.defineProperty(exports2, "InlineValueRefreshRequest", { enumerable: true, get: function() {
    return protocol_inlineValue_1.InlineValueRefreshRequest;
  } });
  var protocol_inlayHint_1 = require_protocol_inlayHint();
  Object.defineProperty(exports2, "InlayHintRequest", { enumerable: true, get: function() {
    return protocol_inlayHint_1.InlayHintRequest;
  } });
  Object.defineProperty(exports2, "InlayHintResolveRequest", { enumerable: true, get: function() {
    return protocol_inlayHint_1.InlayHintResolveRequest;
  } });
  Object.defineProperty(exports2, "InlayHintRefreshRequest", { enumerable: true, get: function() {
    return protocol_inlayHint_1.InlayHintRefreshRequest;
  } });
  var protocol_diagnostic_1 = require_protocol_diagnostic();
  Object.defineProperty(exports2, "DiagnosticServerCancellationData", { enumerable: true, get: function() {
    return protocol_diagnostic_1.DiagnosticServerCancellationData;
  } });
  Object.defineProperty(exports2, "DocumentDiagnosticReportKind", { enumerable: true, get: function() {
    return protocol_diagnostic_1.DocumentDiagnosticReportKind;
  } });
  Object.defineProperty(exports2, "DocumentDiagnosticRequest", { enumerable: true, get: function() {
    return protocol_diagnostic_1.DocumentDiagnosticRequest;
  } });
  Object.defineProperty(exports2, "WorkspaceDiagnosticRequest", { enumerable: true, get: function() {
    return protocol_diagnostic_1.WorkspaceDiagnosticRequest;
  } });
  Object.defineProperty(exports2, "DiagnosticRefreshRequest", { enumerable: true, get: function() {
    return protocol_diagnostic_1.DiagnosticRefreshRequest;
  } });
  var protocol_notebook_1 = require_protocol_notebook();
  Object.defineProperty(exports2, "NotebookCellKind", { enumerable: true, get: function() {
    return protocol_notebook_1.NotebookCellKind;
  } });
  Object.defineProperty(exports2, "ExecutionSummary", { enumerable: true, get: function() {
    return protocol_notebook_1.ExecutionSummary;
  } });
  Object.defineProperty(exports2, "NotebookCell", { enumerable: true, get: function() {
    return protocol_notebook_1.NotebookCell;
  } });
  Object.defineProperty(exports2, "NotebookDocument", { enumerable: true, get: function() {
    return protocol_notebook_1.NotebookDocument;
  } });
  Object.defineProperty(exports2, "NotebookDocumentSyncRegistrationType", { enumerable: true, get: function() {
    return protocol_notebook_1.NotebookDocumentSyncRegistrationType;
  } });
  Object.defineProperty(exports2, "DidOpenNotebookDocumentNotification", { enumerable: true, get: function() {
    return protocol_notebook_1.DidOpenNotebookDocumentNotification;
  } });
  Object.defineProperty(exports2, "NotebookCellArrayChange", { enumerable: true, get: function() {
    return protocol_notebook_1.NotebookCellArrayChange;
  } });
  Object.defineProperty(exports2, "DidChangeNotebookDocumentNotification", { enumerable: true, get: function() {
    return protocol_notebook_1.DidChangeNotebookDocumentNotification;
  } });
  Object.defineProperty(exports2, "DidSaveNotebookDocumentNotification", { enumerable: true, get: function() {
    return protocol_notebook_1.DidSaveNotebookDocumentNotification;
  } });
  Object.defineProperty(exports2, "DidCloseNotebookDocumentNotification", { enumerable: true, get: function() {
    return protocol_notebook_1.DidCloseNotebookDocumentNotification;
  } });
  var protocol_inlineCompletion_1 = require_protocol_inlineCompletion();
  Object.defineProperty(exports2, "InlineCompletionRequest", { enumerable: true, get: function() {
    return protocol_inlineCompletion_1.InlineCompletionRequest;
  } });
  var protocol_textDocumentContent_1 = require_protocol_textDocumentContent();
  Object.defineProperty(exports2, "TextDocumentContentRequest", { enumerable: true, get: function() {
    return protocol_textDocumentContent_1.TextDocumentContentRequest;
  } });
  Object.defineProperty(exports2, "TextDocumentContentRefreshRequest", { enumerable: true, get: function() {
    return protocol_textDocumentContent_1.TextDocumentContentRefreshRequest;
  } });
  var TextDocumentFilter;
  (function(TextDocumentFilter2) {
    function is(value) {
      const candidate = value;
      return Is.string(candidate) || (Is.string(candidate.language) || Is.string(candidate.scheme) || GlobPattern.is(candidate.pattern));
    }
    TextDocumentFilter2.is = is;
  })(TextDocumentFilter || (exports2.TextDocumentFilter = TextDocumentFilter = {}));
  var NotebookDocumentFilter;
  (function(NotebookDocumentFilter2) {
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && (Is.string(candidate.notebookType) || Is.string(candidate.scheme) || Is.string(candidate.pattern));
    }
    NotebookDocumentFilter2.is = is;
  })(NotebookDocumentFilter || (exports2.NotebookDocumentFilter = NotebookDocumentFilter = {}));
  var NotebookCellTextDocumentFilter;
  (function(NotebookCellTextDocumentFilter2) {
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && (Is.string(candidate.notebook) || NotebookDocumentFilter.is(candidate.notebook)) && (candidate.language === undefined || Is.string(candidate.language));
    }
    NotebookCellTextDocumentFilter2.is = is;
  })(NotebookCellTextDocumentFilter || (exports2.NotebookCellTextDocumentFilter = NotebookCellTextDocumentFilter = {}));
  var DocumentSelector;
  (function(DocumentSelector2) {
    function is(value) {
      if (!Array.isArray(value)) {
        return false;
      }
      for (const elem of value) {
        if (!Is.string(elem) && !TextDocumentFilter.is(elem) && !NotebookCellTextDocumentFilter.is(elem)) {
          return false;
        }
      }
      return true;
    }
    DocumentSelector2.is = is;
  })(DocumentSelector || (exports2.DocumentSelector = DocumentSelector = {}));
  var RegistrationRequest;
  (function(RegistrationRequest2) {
    RegistrationRequest2.method = "client/registerCapability";
    RegistrationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    RegistrationRequest2.type = new messages_1.ProtocolRequestType(RegistrationRequest2.method);
  })(RegistrationRequest || (exports2.RegistrationRequest = RegistrationRequest = {}));
  var UnregistrationRequest;
  (function(UnregistrationRequest2) {
    UnregistrationRequest2.method = "client/unregisterCapability";
    UnregistrationRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    UnregistrationRequest2.type = new messages_1.ProtocolRequestType(UnregistrationRequest2.method);
  })(UnregistrationRequest || (exports2.UnregistrationRequest = UnregistrationRequest = {}));
  var ResourceOperationKind;
  (function(ResourceOperationKind2) {
    ResourceOperationKind2.Create = "create";
    ResourceOperationKind2.Rename = "rename";
    ResourceOperationKind2.Delete = "delete";
  })(ResourceOperationKind || (exports2.ResourceOperationKind = ResourceOperationKind = {}));
  var FailureHandlingKind;
  (function(FailureHandlingKind2) {
    FailureHandlingKind2.Abort = "abort";
    FailureHandlingKind2.Transactional = "transactional";
    FailureHandlingKind2.TextOnlyTransactional = "textOnlyTransactional";
    FailureHandlingKind2.Undo = "undo";
  })(FailureHandlingKind || (exports2.FailureHandlingKind = FailureHandlingKind = {}));
  var RegularExpressionEngineKind;
  (function(RegularExpressionEngineKind2) {
    RegularExpressionEngineKind2.ES2020 = "ES2020";
  })(RegularExpressionEngineKind || (exports2.RegularExpressionEngineKind = RegularExpressionEngineKind = {}));
  var PositionEncodingKind;
  (function(PositionEncodingKind2) {
    PositionEncodingKind2.UTF8 = "utf-8";
    PositionEncodingKind2.UTF16 = "utf-16";
    PositionEncodingKind2.UTF32 = "utf-32";
  })(PositionEncodingKind || (exports2.PositionEncodingKind = PositionEncodingKind = {}));
  var StaticRegistrationOptions;
  (function(StaticRegistrationOptions2) {
    function hasId(value) {
      const candidate = value;
      return candidate && Is.string(candidate.id) && candidate.id.length > 0;
    }
    StaticRegistrationOptions2.hasId = hasId;
  })(StaticRegistrationOptions || (exports2.StaticRegistrationOptions = StaticRegistrationOptions = {}));
  var TextDocumentRegistrationOptions;
  (function(TextDocumentRegistrationOptions2) {
    function is(value) {
      const candidate = value;
      return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
    }
    TextDocumentRegistrationOptions2.is = is;
  })(TextDocumentRegistrationOptions || (exports2.TextDocumentRegistrationOptions = TextDocumentRegistrationOptions = {}));
  var WorkDoneProgressOptions;
  (function(WorkDoneProgressOptions2) {
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
    }
    WorkDoneProgressOptions2.is = is;
    function hasWorkDoneProgress(value) {
      const candidate = value;
      return candidate && Is.boolean(candidate.workDoneProgress);
    }
    WorkDoneProgressOptions2.hasWorkDoneProgress = hasWorkDoneProgress;
  })(WorkDoneProgressOptions || (exports2.WorkDoneProgressOptions = WorkDoneProgressOptions = {}));
  var InitializeRequest;
  (function(InitializeRequest2) {
    InitializeRequest2.method = "initialize";
    InitializeRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    InitializeRequest2.type = new messages_1.ProtocolRequestType(InitializeRequest2.method);
  })(InitializeRequest || (exports2.InitializeRequest = InitializeRequest = {}));
  var InitializeErrorCodes;
  (function(InitializeErrorCodes2) {
    InitializeErrorCodes2.unknownProtocolVersion = 1;
  })(InitializeErrorCodes || (exports2.InitializeErrorCodes = InitializeErrorCodes = {}));
  var InitializedNotification;
  (function(InitializedNotification2) {
    InitializedNotification2.method = "initialized";
    InitializedNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    InitializedNotification2.type = new messages_1.ProtocolNotificationType(InitializedNotification2.method);
  })(InitializedNotification || (exports2.InitializedNotification = InitializedNotification = {}));
  var ShutdownRequest;
  (function(ShutdownRequest2) {
    ShutdownRequest2.method = "shutdown";
    ShutdownRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    ShutdownRequest2.type = new messages_1.ProtocolRequestType0(ShutdownRequest2.method);
  })(ShutdownRequest || (exports2.ShutdownRequest = ShutdownRequest = {}));
  var ExitNotification;
  (function(ExitNotification2) {
    ExitNotification2.method = "exit";
    ExitNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    ExitNotification2.type = new messages_1.ProtocolNotificationType0(ExitNotification2.method);
  })(ExitNotification || (exports2.ExitNotification = ExitNotification = {}));
  var DidChangeConfigurationNotification;
  (function(DidChangeConfigurationNotification2) {
    DidChangeConfigurationNotification2.method = "workspace/didChangeConfiguration";
    DidChangeConfigurationNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidChangeConfigurationNotification2.type = new messages_1.ProtocolNotificationType(DidChangeConfigurationNotification2.method);
    DidChangeConfigurationNotification2.capabilities = messages_1.CM.create("workspace.didChangeConfiguration", undefined);
  })(DidChangeConfigurationNotification || (exports2.DidChangeConfigurationNotification = DidChangeConfigurationNotification = {}));
  var MessageType;
  (function(MessageType2) {
    MessageType2.Error = 1;
    MessageType2.Warning = 2;
    MessageType2.Info = 3;
    MessageType2.Log = 4;
    MessageType2.Debug = 5;
  })(MessageType || (exports2.MessageType = MessageType = {}));
  var ShowMessageNotification;
  (function(ShowMessageNotification2) {
    ShowMessageNotification2.method = "window/showMessage";
    ShowMessageNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
    ShowMessageNotification2.type = new messages_1.ProtocolNotificationType(ShowMessageNotification2.method);
    ShowMessageNotification2.capabilities = messages_1.CM.create("window.showMessage", undefined);
  })(ShowMessageNotification || (exports2.ShowMessageNotification = ShowMessageNotification = {}));
  var ShowMessageRequest;
  (function(ShowMessageRequest2) {
    ShowMessageRequest2.method = "window/showMessageRequest";
    ShowMessageRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    ShowMessageRequest2.type = new messages_1.ProtocolRequestType(ShowMessageRequest2.method);
    ShowMessageRequest2.capabilities = messages_1.CM.create("window.showMessage", undefined);
  })(ShowMessageRequest || (exports2.ShowMessageRequest = ShowMessageRequest = {}));
  var LogMessageNotification;
  (function(LogMessageNotification2) {
    LogMessageNotification2.method = "window/logMessage";
    LogMessageNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
    LogMessageNotification2.type = new messages_1.ProtocolNotificationType(LogMessageNotification2.method);
  })(LogMessageNotification || (exports2.LogMessageNotification = LogMessageNotification = {}));
  var TelemetryEventNotification;
  (function(TelemetryEventNotification2) {
    TelemetryEventNotification2.method = "telemetry/event";
    TelemetryEventNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
    TelemetryEventNotification2.type = new messages_1.ProtocolNotificationType(TelemetryEventNotification2.method);
  })(TelemetryEventNotification || (exports2.TelemetryEventNotification = TelemetryEventNotification = {}));
  var TextDocumentSyncKind;
  (function(TextDocumentSyncKind2) {
    TextDocumentSyncKind2.None = 0;
    TextDocumentSyncKind2.Full = 1;
    TextDocumentSyncKind2.Incremental = 2;
  })(TextDocumentSyncKind || (exports2.TextDocumentSyncKind = TextDocumentSyncKind = {}));
  var DidOpenTextDocumentNotification;
  (function(DidOpenTextDocumentNotification2) {
    DidOpenTextDocumentNotification2.method = "textDocument/didOpen";
    DidOpenTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidOpenTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification2.method);
    DidOpenTextDocumentNotification2.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync.openClose");
  })(DidOpenTextDocumentNotification || (exports2.DidOpenTextDocumentNotification = DidOpenTextDocumentNotification = {}));
  var TextDocumentContentChangeEvent;
  (function(TextDocumentContentChangeEvent2) {
    function isIncremental(event) {
      const candidate = event;
      return candidate !== undefined && candidate !== null && typeof candidate.text === "string" && candidate.range !== undefined && (candidate.rangeLength === undefined || typeof candidate.rangeLength === "number");
    }
    TextDocumentContentChangeEvent2.isIncremental = isIncremental;
    function isFull(event) {
      const candidate = event;
      return candidate !== undefined && candidate !== null && typeof candidate.text === "string" && candidate.range === undefined && candidate.rangeLength === undefined;
    }
    TextDocumentContentChangeEvent2.isFull = isFull;
  })(TextDocumentContentChangeEvent || (exports2.TextDocumentContentChangeEvent = TextDocumentContentChangeEvent = {}));
  var DidChangeTextDocumentNotification;
  (function(DidChangeTextDocumentNotification2) {
    DidChangeTextDocumentNotification2.method = "textDocument/didChange";
    DidChangeTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidChangeTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification2.method);
    DidChangeTextDocumentNotification2.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync");
  })(DidChangeTextDocumentNotification || (exports2.DidChangeTextDocumentNotification = DidChangeTextDocumentNotification = {}));
  var DidCloseTextDocumentNotification;
  (function(DidCloseTextDocumentNotification2) {
    DidCloseTextDocumentNotification2.method = "textDocument/didClose";
    DidCloseTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidCloseTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification2.method);
    DidCloseTextDocumentNotification2.capabilities = messages_1.CM.create("textDocument.synchronization", "textDocumentSync.openClose");
  })(DidCloseTextDocumentNotification || (exports2.DidCloseTextDocumentNotification = DidCloseTextDocumentNotification = {}));
  var DidSaveTextDocumentNotification;
  (function(DidSaveTextDocumentNotification2) {
    DidSaveTextDocumentNotification2.method = "textDocument/didSave";
    DidSaveTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification2.method);
    DidSaveTextDocumentNotification2.capabilities = messages_1.CM.create("textDocument.synchronization.didSave", "textDocumentSync.save");
  })(DidSaveTextDocumentNotification || (exports2.DidSaveTextDocumentNotification = DidSaveTextDocumentNotification = {}));
  var TextDocumentSaveReason;
  (function(TextDocumentSaveReason2) {
    TextDocumentSaveReason2.Manual = 1;
    TextDocumentSaveReason2.AfterDelay = 2;
    TextDocumentSaveReason2.FocusOut = 3;
  })(TextDocumentSaveReason || (exports2.TextDocumentSaveReason = TextDocumentSaveReason = {}));
  var WillSaveTextDocumentNotification;
  (function(WillSaveTextDocumentNotification2) {
    WillSaveTextDocumentNotification2.method = "textDocument/willSave";
    WillSaveTextDocumentNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    WillSaveTextDocumentNotification2.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification2.method);
    WillSaveTextDocumentNotification2.capabilities = messages_1.CM.create("textDocument.synchronization.willSave", "textDocumentSync.willSave");
  })(WillSaveTextDocumentNotification || (exports2.WillSaveTextDocumentNotification = WillSaveTextDocumentNotification = {}));
  var WillSaveTextDocumentWaitUntilRequest;
  (function(WillSaveTextDocumentWaitUntilRequest2) {
    WillSaveTextDocumentWaitUntilRequest2.method = "textDocument/willSaveWaitUntil";
    WillSaveTextDocumentWaitUntilRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WillSaveTextDocumentWaitUntilRequest2.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest2.method);
    WillSaveTextDocumentWaitUntilRequest2.capabilities = messages_1.CM.create("textDocument.synchronization.willSaveWaitUntil", "textDocumentSync.willSaveWaitUntil");
  })(WillSaveTextDocumentWaitUntilRequest || (exports2.WillSaveTextDocumentWaitUntilRequest = WillSaveTextDocumentWaitUntilRequest = {}));
  var DidChangeWatchedFilesNotification;
  (function(DidChangeWatchedFilesNotification2) {
    DidChangeWatchedFilesNotification2.method = "workspace/didChangeWatchedFiles";
    DidChangeWatchedFilesNotification2.messageDirection = messages_1.MessageDirection.clientToServer;
    DidChangeWatchedFilesNotification2.type = new messages_1.ProtocolNotificationType(DidChangeWatchedFilesNotification2.method);
    DidChangeWatchedFilesNotification2.capabilities = messages_1.CM.create("workspace.didChangeWatchedFiles", undefined);
  })(DidChangeWatchedFilesNotification || (exports2.DidChangeWatchedFilesNotification = DidChangeWatchedFilesNotification = {}));
  var FileChangeType;
  (function(FileChangeType2) {
    FileChangeType2.Created = 1;
    FileChangeType2.Changed = 2;
    FileChangeType2.Deleted = 3;
  })(FileChangeType || (exports2.FileChangeType = FileChangeType = {}));
  var RelativePattern;
  (function(RelativePattern2) {
    function is(value) {
      const candidate = value;
      return Is.objectLiteral(candidate) && (vscode_languageserver_types_1.URI.is(candidate.baseUri) || vscode_languageserver_types_1.WorkspaceFolder.is(candidate.baseUri)) && Is.string(candidate.pattern);
    }
    RelativePattern2.is = is;
  })(RelativePattern || (exports2.RelativePattern = RelativePattern = {}));
  var GlobPattern;
  (function(GlobPattern2) {
    function is(value) {
      const candidate = value;
      return Is.string(candidate) || RelativePattern.is(candidate);
    }
    GlobPattern2.is = is;
  })(GlobPattern || (exports2.GlobPattern = GlobPattern = {}));
  var WatchKind;
  (function(WatchKind2) {
    WatchKind2.Create = 1;
    WatchKind2.Change = 2;
    WatchKind2.Delete = 4;
  })(WatchKind || (exports2.WatchKind = WatchKind = {}));
  var PublishDiagnosticsNotification;
  (function(PublishDiagnosticsNotification2) {
    PublishDiagnosticsNotification2.method = "textDocument/publishDiagnostics";
    PublishDiagnosticsNotification2.messageDirection = messages_1.MessageDirection.serverToClient;
    PublishDiagnosticsNotification2.type = new messages_1.ProtocolNotificationType(PublishDiagnosticsNotification2.method);
    PublishDiagnosticsNotification2.capabilities = messages_1.CM.create("textDocument.publishDiagnostics", undefined);
  })(PublishDiagnosticsNotification || (exports2.PublishDiagnosticsNotification = PublishDiagnosticsNotification = {}));
  var CompletionTriggerKind;
  (function(CompletionTriggerKind2) {
    CompletionTriggerKind2.Invoked = 1;
    CompletionTriggerKind2.TriggerCharacter = 2;
    CompletionTriggerKind2.TriggerForIncompleteCompletions = 3;
  })(CompletionTriggerKind || (exports2.CompletionTriggerKind = CompletionTriggerKind = {}));
  var CompletionRequest;
  (function(CompletionRequest2) {
    CompletionRequest2.method = "textDocument/completion";
    CompletionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CompletionRequest2.type = new messages_1.ProtocolRequestType(CompletionRequest2.method);
    CompletionRequest2.capabilities = messages_1.CM.create("textDocument.completion", "completionProvider");
  })(CompletionRequest || (exports2.CompletionRequest = CompletionRequest = {}));
  var CompletionResolveRequest;
  (function(CompletionResolveRequest2) {
    CompletionResolveRequest2.method = "completionItem/resolve";
    CompletionResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CompletionResolveRequest2.type = new messages_1.ProtocolRequestType(CompletionResolveRequest2.method);
    CompletionResolveRequest2.capabilities = messages_1.CM.create("textDocument.completion.completionItem.resolveSupport", "completionProvider.resolveProvider");
  })(CompletionResolveRequest || (exports2.CompletionResolveRequest = CompletionResolveRequest = {}));
  var HoverRequest;
  (function(HoverRequest2) {
    HoverRequest2.method = "textDocument/hover";
    HoverRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    HoverRequest2.type = new messages_1.ProtocolRequestType(HoverRequest2.method);
    HoverRequest2.capabilities = messages_1.CM.create("textDocument.hover", "hoverProvider");
  })(HoverRequest || (exports2.HoverRequest = HoverRequest = {}));
  var SignatureHelpTriggerKind;
  (function(SignatureHelpTriggerKind2) {
    SignatureHelpTriggerKind2.Invoked = 1;
    SignatureHelpTriggerKind2.TriggerCharacter = 2;
    SignatureHelpTriggerKind2.ContentChange = 3;
  })(SignatureHelpTriggerKind || (exports2.SignatureHelpTriggerKind = SignatureHelpTriggerKind = {}));
  var SignatureHelpRequest;
  (function(SignatureHelpRequest2) {
    SignatureHelpRequest2.method = "textDocument/signatureHelp";
    SignatureHelpRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    SignatureHelpRequest2.type = new messages_1.ProtocolRequestType(SignatureHelpRequest2.method);
    SignatureHelpRequest2.capabilities = messages_1.CM.create("textDocument.signatureHelp", "signatureHelpProvider");
  })(SignatureHelpRequest || (exports2.SignatureHelpRequest = SignatureHelpRequest = {}));
  var DefinitionRequest;
  (function(DefinitionRequest2) {
    DefinitionRequest2.method = "textDocument/definition";
    DefinitionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DefinitionRequest2.type = new messages_1.ProtocolRequestType(DefinitionRequest2.method);
    DefinitionRequest2.capabilities = messages_1.CM.create("textDocument.definition", "definitionProvider");
  })(DefinitionRequest || (exports2.DefinitionRequest = DefinitionRequest = {}));
  var ReferencesRequest;
  (function(ReferencesRequest2) {
    ReferencesRequest2.method = "textDocument/references";
    ReferencesRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    ReferencesRequest2.type = new messages_1.ProtocolRequestType(ReferencesRequest2.method);
    ReferencesRequest2.capabilities = messages_1.CM.create("textDocument.references", "referencesProvider");
  })(ReferencesRequest || (exports2.ReferencesRequest = ReferencesRequest = {}));
  var DocumentHighlightRequest;
  (function(DocumentHighlightRequest2) {
    DocumentHighlightRequest2.method = "textDocument/documentHighlight";
    DocumentHighlightRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentHighlightRequest2.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest2.method);
    DocumentHighlightRequest2.capabilities = messages_1.CM.create("textDocument.documentHighlight", "documentHighlightProvider");
  })(DocumentHighlightRequest || (exports2.DocumentHighlightRequest = DocumentHighlightRequest = {}));
  var DocumentSymbolRequest;
  (function(DocumentSymbolRequest2) {
    DocumentSymbolRequest2.method = "textDocument/documentSymbol";
    DocumentSymbolRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentSymbolRequest2.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest2.method);
    DocumentSymbolRequest2.capabilities = messages_1.CM.create("textDocument.documentSymbol", "documentSymbolProvider");
  })(DocumentSymbolRequest || (exports2.DocumentSymbolRequest = DocumentSymbolRequest = {}));
  var CodeActionRequest;
  (function(CodeActionRequest2) {
    CodeActionRequest2.method = "textDocument/codeAction";
    CodeActionRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CodeActionRequest2.type = new messages_1.ProtocolRequestType(CodeActionRequest2.method);
    CodeActionRequest2.capabilities = messages_1.CM.create("textDocument.codeAction", "codeActionProvider");
  })(CodeActionRequest || (exports2.CodeActionRequest = CodeActionRequest = {}));
  var CodeActionResolveRequest;
  (function(CodeActionResolveRequest2) {
    CodeActionResolveRequest2.method = "codeAction/resolve";
    CodeActionResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CodeActionResolveRequest2.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest2.method);
    CodeActionResolveRequest2.capabilities = messages_1.CM.create("textDocument.codeAction.resolveSupport", "codeActionProvider.resolveProvider");
  })(CodeActionResolveRequest || (exports2.CodeActionResolveRequest = CodeActionResolveRequest = {}));
  var WorkspaceSymbolRequest;
  (function(WorkspaceSymbolRequest2) {
    WorkspaceSymbolRequest2.method = "workspace/symbol";
    WorkspaceSymbolRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WorkspaceSymbolRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest2.method);
    WorkspaceSymbolRequest2.capabilities = messages_1.CM.create("workspace.symbol", "workspaceSymbolProvider");
  })(WorkspaceSymbolRequest || (exports2.WorkspaceSymbolRequest = WorkspaceSymbolRequest = {}));
  var WorkspaceSymbolResolveRequest;
  (function(WorkspaceSymbolResolveRequest2) {
    WorkspaceSymbolResolveRequest2.method = "workspaceSymbol/resolve";
    WorkspaceSymbolResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    WorkspaceSymbolResolveRequest2.type = new messages_1.ProtocolRequestType(WorkspaceSymbolResolveRequest2.method);
    WorkspaceSymbolResolveRequest2.capabilities = messages_1.CM.create("workspace.symbol.resolveSupport", "workspaceSymbolProvider.resolveProvider");
  })(WorkspaceSymbolResolveRequest || (exports2.WorkspaceSymbolResolveRequest = WorkspaceSymbolResolveRequest = {}));
  var CodeLensRequest;
  (function(CodeLensRequest2) {
    CodeLensRequest2.method = "textDocument/codeLens";
    CodeLensRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CodeLensRequest2.type = new messages_1.ProtocolRequestType(CodeLensRequest2.method);
    CodeLensRequest2.capabilities = messages_1.CM.create("textDocument.codeLens", "codeLensProvider");
  })(CodeLensRequest || (exports2.CodeLensRequest = CodeLensRequest = {}));
  var CodeLensResolveRequest;
  (function(CodeLensResolveRequest2) {
    CodeLensResolveRequest2.method = "codeLens/resolve";
    CodeLensResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    CodeLensResolveRequest2.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest2.method);
    CodeLensResolveRequest2.capabilities = messages_1.CM.create("textDocument.codeLens.resolveSupport", "codeLensProvider.resolveProvider");
  })(CodeLensResolveRequest || (exports2.CodeLensResolveRequest = CodeLensResolveRequest = {}));
  var CodeLensRefreshRequest;
  (function(CodeLensRefreshRequest2) {
    CodeLensRefreshRequest2.method = `workspace/codeLens/refresh`;
    CodeLensRefreshRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    CodeLensRefreshRequest2.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest2.method);
    CodeLensRefreshRequest2.capabilities = messages_1.CM.create("workspace.codeLens", undefined);
  })(CodeLensRefreshRequest || (exports2.CodeLensRefreshRequest = CodeLensRefreshRequest = {}));
  var DocumentLinkRequest;
  (function(DocumentLinkRequest2) {
    DocumentLinkRequest2.method = "textDocument/documentLink";
    DocumentLinkRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentLinkRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkRequest2.method);
    DocumentLinkRequest2.capabilities = messages_1.CM.create("textDocument.documentLink", "documentLinkProvider");
  })(DocumentLinkRequest || (exports2.DocumentLinkRequest = DocumentLinkRequest = {}));
  var DocumentLinkResolveRequest;
  (function(DocumentLinkResolveRequest2) {
    DocumentLinkResolveRequest2.method = "documentLink/resolve";
    DocumentLinkResolveRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentLinkResolveRequest2.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest2.method);
    DocumentLinkResolveRequest2.capabilities = messages_1.CM.create("textDocument.documentLink", "documentLinkProvider.resolveProvider");
  })(DocumentLinkResolveRequest || (exports2.DocumentLinkResolveRequest = DocumentLinkResolveRequest = {}));
  var DocumentFormattingRequest;
  (function(DocumentFormattingRequest2) {
    DocumentFormattingRequest2.method = "textDocument/formatting";
    DocumentFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest2.method);
    DocumentFormattingRequest2.capabilities = messages_1.CM.create("textDocument.formatting", "documentFormattingProvider");
  })(DocumentFormattingRequest || (exports2.DocumentFormattingRequest = DocumentFormattingRequest = {}));
  var DocumentRangeFormattingRequest;
  (function(DocumentRangeFormattingRequest2) {
    DocumentRangeFormattingRequest2.method = "textDocument/rangeFormatting";
    DocumentRangeFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentRangeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest2.method);
    DocumentRangeFormattingRequest2.capabilities = messages_1.CM.create("textDocument.rangeFormatting", "documentRangeFormattingProvider");
  })(DocumentRangeFormattingRequest || (exports2.DocumentRangeFormattingRequest = DocumentRangeFormattingRequest = {}));
  var DocumentRangesFormattingRequest;
  (function(DocumentRangesFormattingRequest2) {
    DocumentRangesFormattingRequest2.method = "textDocument/rangesFormatting";
    DocumentRangesFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentRangesFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentRangesFormattingRequest2.method);
    DocumentRangesFormattingRequest2.capabilities = messages_1.CM.create("textDocument.rangeFormatting.rangesSupport", "documentRangeFormattingProvider.rangesSupport");
  })(DocumentRangesFormattingRequest || (exports2.DocumentRangesFormattingRequest = DocumentRangesFormattingRequest = {}));
  var DocumentOnTypeFormattingRequest;
  (function(DocumentOnTypeFormattingRequest2) {
    DocumentOnTypeFormattingRequest2.method = "textDocument/onTypeFormatting";
    DocumentOnTypeFormattingRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    DocumentOnTypeFormattingRequest2.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest2.method);
    DocumentOnTypeFormattingRequest2.capabilities = messages_1.CM.create("textDocument.onTypeFormatting", "documentOnTypeFormattingProvider");
  })(DocumentOnTypeFormattingRequest || (exports2.DocumentOnTypeFormattingRequest = DocumentOnTypeFormattingRequest = {}));
  var PrepareSupportDefaultBehavior;
  (function(PrepareSupportDefaultBehavior2) {
    PrepareSupportDefaultBehavior2.Identifier = 1;
  })(PrepareSupportDefaultBehavior || (exports2.PrepareSupportDefaultBehavior = PrepareSupportDefaultBehavior = {}));
  var RenameRequest;
  (function(RenameRequest2) {
    RenameRequest2.method = "textDocument/rename";
    RenameRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    RenameRequest2.type = new messages_1.ProtocolRequestType(RenameRequest2.method);
    RenameRequest2.capabilities = messages_1.CM.create("textDocument.rename", "renameProvider");
  })(RenameRequest || (exports2.RenameRequest = RenameRequest = {}));
  var PrepareRenameRequest;
  (function(PrepareRenameRequest2) {
    PrepareRenameRequest2.method = "textDocument/prepareRename";
    PrepareRenameRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    PrepareRenameRequest2.type = new messages_1.ProtocolRequestType(PrepareRenameRequest2.method);
    PrepareRenameRequest2.capabilities = messages_1.CM.create("textDocument.rename.prepareSupport", "renameProvider.prepareProvider");
  })(PrepareRenameRequest || (exports2.PrepareRenameRequest = PrepareRenameRequest = {}));
  var ExecuteCommandRequest;
  (function(ExecuteCommandRequest2) {
    ExecuteCommandRequest2.method = "workspace/executeCommand";
    ExecuteCommandRequest2.messageDirection = messages_1.MessageDirection.clientToServer;
    ExecuteCommandRequest2.type = new messages_1.ProtocolRequestType(ExecuteCommandRequest2.method);
    ExecuteCommandRequest2.capabilities = messages_1.CM.create("workspace.executeCommand", "executeCommandProvider");
  })(ExecuteCommandRequest || (exports2.ExecuteCommandRequest = ExecuteCommandRequest = {}));
  var ApplyWorkspaceEditRequest;
  (function(ApplyWorkspaceEditRequest2) {
    ApplyWorkspaceEditRequest2.method = "workspace/applyEdit";
    ApplyWorkspaceEditRequest2.messageDirection = messages_1.MessageDirection.serverToClient;
    ApplyWorkspaceEditRequest2.type = new messages_1.ProtocolRequestType("workspace/applyEdit");
    ApplyWorkspaceEditRequest2.capabilities = messages_1.CM.create("workspace.applyEdit", undefined);
  })(ApplyWorkspaceEditRequest || (exports2.ApplyWorkspaceEditRequest = ApplyWorkspaceEditRequest = {}));
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/connection.js
var require_connection2 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.createProtocolConnection = createProtocolConnection;
  var vscode_jsonrpc_1 = require_api();
  function createProtocolConnection(input, output, logger, options) {
    if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) {
      options = { connectionStrategy: options };
    }
    return (0, vscode_jsonrpc_1.createMessageConnection)(input, output, logger, options);
  }
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/common/api.js
var require_api2 = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
    for (var p in m)
      if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
        __createBinding(exports3, m, p);
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.LSPErrorCodes = exports2.createProtocolConnection = undefined;
  __exportStar(require_api(), exports2);
  __exportStar(require_main(), exports2);
  __exportStar(require_messages2(), exports2);
  __exportStar(require_protocol(), exports2);
  var connection_1 = require_connection2();
  Object.defineProperty(exports2, "createProtocolConnection", { enumerable: true, get: function() {
    return connection_1.createProtocolConnection;
  } });
  var LSPErrorCodes;
  (function(LSPErrorCodes2) {
    LSPErrorCodes2.lspReservedErrorRangeStart = -32899;
    LSPErrorCodes2.RequestFailed = -32803;
    LSPErrorCodes2.ServerCancelled = -32802;
    LSPErrorCodes2.ContentModified = -32801;
    LSPErrorCodes2.RequestCancelled = -32800;
    LSPErrorCodes2.lspReservedErrorRangeEnd = -32800;
  })(LSPErrorCodes || (exports2.LSPErrorCodes = LSPErrorCodes = {}));
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/utils/async.js
var require_async = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.Semaphore = exports2.Delayer = undefined;
  exports2.setTestMode = setTestMode;
  exports2.clearTestMode = clearTestMode;
  exports2.map = map;
  exports2.mapAsync = mapAsync;
  exports2.forEach = forEach;
  var vscode_languageserver_protocol_1 = require_api2();

  class Delayer {
    defaultDelay;
    timeout;
    completionPromise;
    onSuccess;
    task;
    constructor(defaultDelay) {
      this.defaultDelay = defaultDelay;
      this.timeout = undefined;
      this.completionPromise = undefined;
      this.onSuccess = undefined;
      this.task = undefined;
    }
    trigger(task, delay = this.defaultDelay) {
      this.task = task;
      if (delay >= 0) {
        this.cancelTimeout();
      }
      if (!this.completionPromise) {
        this.completionPromise = new Promise((resolve) => {
          this.onSuccess = resolve;
        }).then(() => {
          this.completionPromise = undefined;
          this.onSuccess = undefined;
          const result = this.task();
          this.task = undefined;
          return result;
        });
      }
      if (delay >= 0 || this.timeout === undefined) {
        this.timeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {
          this.timeout = undefined;
          this.onSuccess(undefined);
        }, delay >= 0 ? delay : this.defaultDelay);
      }
      return this.completionPromise;
    }
    forceDelivery() {
      if (!this.completionPromise) {
        return;
      }
      this.cancelTimeout();
      const result = this.task();
      this.completionPromise = undefined;
      this.onSuccess = undefined;
      this.task = undefined;
      return result;
    }
    isTriggered() {
      return this.timeout !== undefined;
    }
    cancel() {
      this.cancelTimeout();
      this.completionPromise = undefined;
    }
    cancelTimeout() {
      if (this.timeout !== undefined) {
        this.timeout.dispose();
        this.timeout = undefined;
      }
    }
  }
  exports2.Delayer = Delayer;

  class Semaphore {
    _capacity;
    _active;
    _waiting;
    constructor(capacity = 1) {
      if (capacity <= 0) {
        throw new Error("Capacity must be greater than 0");
      }
      this._capacity = capacity;
      this._active = 0;
      this._waiting = [];
    }
    lock(thunk) {
      return new Promise((resolve, reject) => {
        this._waiting.push({ thunk, resolve, reject });
        this.runNext();
      });
    }
    get active() {
      return this._active;
    }
    runNext() {
      if (this._waiting.length === 0 || this._active === this._capacity) {
        return;
      }
      (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => this.doRunNext());
    }
    doRunNext() {
      if (this._waiting.length === 0 || this._active === this._capacity) {
        return;
      }
      const next = this._waiting.shift();
      this._active++;
      if (this._active > this._capacity) {
        throw new Error(`To many thunks active`);
      }
      try {
        const result = next.thunk();
        if (result instanceof Promise) {
          result.then((value) => {
            this._active--;
            next.resolve(value);
            this.runNext();
          }, (err) => {
            this._active--;
            next.reject(err);
            this.runNext();
          });
        } else {
          this._active--;
          next.resolve(result);
          this.runNext();
        }
      } catch (err) {
        this._active--;
        next.reject(err);
        this.runNext();
      }
    }
  }
  exports2.Semaphore = Semaphore;
  var $test = false;
  function setTestMode() {
    $test = true;
  }
  function clearTestMode() {
    $test = false;
  }
  var defaultYieldTimeout = 15;

  class Timer {
    yieldAfter;
    startTime;
    counter;
    total;
    counterInterval;
    constructor(yieldAfter = defaultYieldTimeout) {
      this.yieldAfter = $test === true ? Math.max(yieldAfter, 2) : Math.max(yieldAfter, defaultYieldTimeout);
      this.startTime = Date.now();
      this.counter = 0;
      this.total = 0;
      this.counterInterval = 1;
    }
    start() {
      this.counter = 0;
      this.total = 0;
      this.counterInterval = 1;
      this.startTime = Date.now();
    }
    shouldYield() {
      if (++this.counter >= this.counterInterval) {
        const timeTaken = Date.now() - this.startTime;
        const timeLeft = Math.max(0, this.yieldAfter - timeTaken);
        this.total += this.counter;
        this.counter = 0;
        if (timeTaken >= this.yieldAfter || timeLeft <= 1) {
          this.counterInterval = 1;
          this.total = 0;
          return true;
        } else {
          switch (timeTaken) {
            case 0:
            case 1:
              this.counterInterval = this.total * 2;
              break;
          }
        }
      }
      return false;
    }
  }
  async function map(items, func, token, options) {
    if (items.length === 0) {
      return [];
    }
    const result = new Array(items.length);
    const timer = new Timer(options?.yieldAfter);
    function convertBatch(start) {
      timer.start();
      for (let i = start;i < items.length; i++) {
        result[i] = func(items[i]);
        if (timer.shouldYield()) {
          options?.yieldCallback && options.yieldCallback();
          return i + 1;
        }
      }
      return -1;
    }
    let index = convertBatch(0);
    while (index !== -1) {
      if (token !== undefined && token.isCancellationRequested) {
        break;
      }
      index = await new Promise((resolve) => {
        (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {
          if (token !== undefined && token.isCancellationRequested) {
            resolve(-1);
          } else {
            resolve(convertBatch(index));
          }
        });
      });
    }
    return result;
  }
  async function mapAsync(items, func, token, options) {
    if (items.length === 0) {
      return [];
    }
    const result = new Array(items.length);
    const timer = new Timer(options?.yieldAfter);
    async function convertBatch(start) {
      timer.start();
      for (let i = start;i < items.length; i++) {
        result[i] = await func(items[i], token);
        if (timer.shouldYield()) {
          options?.yieldCallback && options.yieldCallback();
          return i + 1;
        }
      }
      return -1;
    }
    let index = await convertBatch(0);
    while (index !== -1) {
      if (token !== undefined && token.isCancellationRequested) {
        break;
      }
      index = await new Promise((resolve) => {
        (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {
          if (token !== undefined && token.isCancellationRequested) {
            resolve(-1);
          } else {
            resolve(convertBatch(index));
          }
        });
      });
    }
    return result;
  }
  async function forEach(items, func, token, options) {
    if (items.length === 0) {
      return;
    }
    const timer = new Timer(options?.yieldAfter);
    function runBatch(start) {
      timer.start();
      for (let i = start;i < items.length; i++) {
        func(items[i]);
        if (timer.shouldYield()) {
          options?.yieldCallback && options.yieldCallback();
          return i + 1;
        }
      }
      return -1;
    }
    let index = runBatch(0);
    while (index !== -1) {
      if (token !== undefined && token.isCancellationRequested) {
        break;
      }
      index = await new Promise((resolve) => {
        (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {
          if (token !== undefined && token.isCancellationRequested) {
            resolve(-1);
          } else {
            resolve(runBatch(index));
          }
        });
      });
    }
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolCompletionItem.js
var require_protocolCompletionItem = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolCompletionItem extends code.CompletionItem {
    data;
    fromEdit;
    documentationFormat;
    originalItemKind;
    deprecated;
    insertTextMode;
    constructor(label) {
      super(label);
    }
  }
  exports2.default = ProtocolCompletionItem;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolCodeLens.js
var require_protocolCodeLens = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolCodeLens extends code.CodeLens {
    data;
    constructor(range) {
      super(range);
    }
  }
  exports2.default = ProtocolCodeLens;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolDocumentLink.js
var require_protocolDocumentLink = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolDocumentLink extends code.DocumentLink {
    data;
    constructor(range, target) {
      super(range, target);
    }
  }
  exports2.default = ProtocolDocumentLink;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolCodeAction.js
var require_protocolCodeAction = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var vscode = __importStar(require("vscode"));

  class ProtocolCodeAction extends vscode.CodeAction {
    data;
    constructor(title, data) {
      super(title);
      this.data = data;
    }
  }
  exports2.default = ProtocolCodeAction;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolDiagnostic.js
var require_protocolDiagnostic = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ProtocolDiagnostic = exports2.DiagnosticCode = undefined;
  var vscode = __importStar(require("vscode"));
  var Is = __importStar(require_is());
  var DiagnosticCode;
  (function(DiagnosticCode2) {
    function is(value) {
      const candidate = value;
      return candidate !== undefined && candidate !== null && (Is.number(candidate.value) || Is.string(candidate.value)) && Is.string(candidate.target);
    }
    DiagnosticCode2.is = is;
  })(DiagnosticCode || (exports2.DiagnosticCode = DiagnosticCode = {}));

  class ProtocolDiagnostic extends vscode.Diagnostic {
    data;
    hasDiagnosticCode;
    constructor(range, message, severity, data) {
      super(range, message, severity);
      this.data = data;
      this.hasDiagnosticCode = false;
    }
  }
  exports2.ProtocolDiagnostic = ProtocolDiagnostic;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolCallHierarchyItem.js
var require_protocolCallHierarchyItem = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolCallHierarchyItem extends code.CallHierarchyItem {
    data;
    constructor(kind, name, detail, uri, range, selectionRange, data) {
      super(kind, name, detail, uri, range, selectionRange);
      if (data !== undefined) {
        this.data = data;
      }
    }
  }
  exports2.default = ProtocolCallHierarchyItem;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolTypeHierarchyItem.js
var require_protocolTypeHierarchyItem = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolTypeHierarchyItem extends code.TypeHierarchyItem {
    data;
    constructor(kind, name, detail, uri, range, selectionRange, data) {
      super(kind, name, detail, uri, range, selectionRange);
      if (data !== undefined) {
        this.data = data;
      }
    }
  }
  exports2.default = ProtocolTypeHierarchyItem;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolWorkspaceSymbol.js
var require_protocolWorkspaceSymbol = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class WorkspaceSymbol extends code.SymbolInformation {
    data;
    hasRange;
    constructor(name, kind, containerName, locationOrUri, data) {
      const hasRange = !(locationOrUri instanceof code.Uri);
      super(name, kind, containerName, hasRange ? locationOrUri : new code.Location(locationOrUri, new code.Range(0, 0, 0, 0)));
      this.hasRange = hasRange;
      if (data !== undefined) {
        this.data = data;
      }
    }
  }
  exports2.default = WorkspaceSymbol;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolInlayHint.js
var require_protocolInlayHint = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  var code = __importStar(require("vscode"));

  class ProtocolInlayHint extends code.InlayHint {
    data;
    constructor(position, label, kind) {
      super(position, label, kind);
    }
  }
  exports2.default = ProtocolInlayHint;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/codeConverter.js
var require_codeConverter = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.createConverter = createConverter;
  var code = __importStar(require("vscode"));
  var proto = __importStar(require_api2());
  var Is = __importStar(require_is());
  var async = __importStar(require_async());
  var protocolCompletionItem_1 = __importDefault(require_protocolCompletionItem());
  var protocolCodeLens_1 = __importDefault(require_protocolCodeLens());
  var protocolDocumentLink_1 = __importDefault(require_protocolDocumentLink());
  var protocolCodeAction_1 = __importDefault(require_protocolCodeAction());
  var protocolDiagnostic_1 = require_protocolDiagnostic();
  var protocolCallHierarchyItem_1 = __importDefault(require_protocolCallHierarchyItem());
  var protocolTypeHierarchyItem_1 = __importDefault(require_protocolTypeHierarchyItem());
  var protocolWorkspaceSymbol_1 = __importDefault(require_protocolWorkspaceSymbol());
  var protocolInlayHint_1 = __importDefault(require_protocolInlayHint());
  var InsertReplaceRange;
  (function(InsertReplaceRange2) {
    function is(value) {
      const candidate = value;
      return candidate && !!candidate.inserting && !!candidate.replacing;
    }
    InsertReplaceRange2.is = is;
  })(InsertReplaceRange || (InsertReplaceRange = {}));
  function createConverter(uriConverter) {
    const nullConverter = (value) => value.toString();
    const _uriConverter = uriConverter || nullConverter;
    function asUri(value) {
      return _uriConverter(value);
    }
    function asTextDocumentIdentifier(textDocument) {
      return {
        uri: _uriConverter(textDocument.uri)
      };
    }
    function asTextDocumentItem(textDocument) {
      return {
        uri: _uriConverter(textDocument.uri),
        languageId: textDocument.languageId,
        version: textDocument.version,
        text: textDocument.getText()
      };
    }
    function asVersionedTextDocumentIdentifier(textDocument) {
      return {
        uri: _uriConverter(textDocument.uri),
        version: textDocument.version
      };
    }
    function asOpenTextDocumentParams(textDocument) {
      return {
        textDocument: asTextDocumentItem(textDocument)
      };
    }
    function isTextDocumentChangeEvent(value) {
      const candidate = value;
      return !!candidate.document && !!candidate.contentChanges;
    }
    function isTextDocument(value) {
      const candidate = value;
      return !!candidate.uri && !!candidate.version;
    }
    function asChangeTextDocumentParams(arg0, arg1, arg2) {
      if (isTextDocument(arg0)) {
        const result = {
          textDocument: {
            uri: _uriConverter(arg0.uri),
            version: arg0.version
          },
          contentChanges: [{ text: arg0.getText() }]
        };
        return result;
      } else if (isTextDocumentChangeEvent(arg0)) {
        const uri = arg1;
        const version = arg2;
        const result = {
          textDocument: {
            uri: _uriConverter(uri),
            version
          },
          contentChanges: arg0.contentChanges.map((change) => {
            const range = change.range;
            return {
              range: {
                start: { line: range.start.line, character: range.start.character },
                end: { line: range.end.line, character: range.end.character }
              },
              rangeLength: change.rangeLength,
              text: change.text
            };
          })
        };
        return result;
      } else {
        throw Error("Unsupported text document change parameter");
      }
    }
    function asCloseTextDocumentParams(textDocument) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument)
      };
    }
    function asSaveTextDocumentParams(textDocument, includeContent = false) {
      const result = {
        textDocument: asTextDocumentIdentifier(textDocument)
      };
      if (includeContent) {
        result.text = textDocument.getText();
      }
      return result;
    }
    function asTextDocumentSaveReason(reason) {
      switch (reason) {
        case code.TextDocumentSaveReason.Manual:
          return proto.TextDocumentSaveReason.Manual;
        case code.TextDocumentSaveReason.AfterDelay:
          return proto.TextDocumentSaveReason.AfterDelay;
        case code.TextDocumentSaveReason.FocusOut:
          return proto.TextDocumentSaveReason.FocusOut;
      }
      return proto.TextDocumentSaveReason.Manual;
    }
    function asWillSaveTextDocumentParams(event) {
      return {
        textDocument: asTextDocumentIdentifier(event.document),
        reason: asTextDocumentSaveReason(event.reason)
      };
    }
    function asDidCreateFilesParams(event) {
      return {
        files: event.files.map((fileUri) => ({
          uri: _uriConverter(fileUri)
        }))
      };
    }
    function asDidRenameFilesParams(event) {
      return {
        files: event.files.map((file) => ({
          oldUri: _uriConverter(file.oldUri),
          newUri: _uriConverter(file.newUri)
        }))
      };
    }
    function asDidDeleteFilesParams(event) {
      return {
        files: event.files.map((fileUri) => ({
          uri: _uriConverter(fileUri)
        }))
      };
    }
    function asWillCreateFilesParams(event) {
      return {
        files: event.files.map((fileUri) => ({
          uri: _uriConverter(fileUri)
        }))
      };
    }
    function asWillRenameFilesParams(event) {
      return {
        files: event.files.map((file) => ({
          oldUri: _uriConverter(file.oldUri),
          newUri: _uriConverter(file.newUri)
        }))
      };
    }
    function asWillDeleteFilesParams(event) {
      return {
        files: event.files.map((fileUri) => ({
          uri: _uriConverter(fileUri)
        }))
      };
    }
    function asTextDocumentPositionParams(textDocument, position) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument),
        position: asWorkerPosition(position)
      };
    }
    function asCompletionTriggerKind(triggerKind) {
      switch (triggerKind) {
        case code.CompletionTriggerKind.TriggerCharacter:
          return proto.CompletionTriggerKind.TriggerCharacter;
        case code.CompletionTriggerKind.TriggerForIncompleteCompletions:
          return proto.CompletionTriggerKind.TriggerForIncompleteCompletions;
        default:
          return proto.CompletionTriggerKind.Invoked;
      }
    }
    function asCompletionParams(textDocument, position, context) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument),
        position: asWorkerPosition(position),
        context: {
          triggerKind: asCompletionTriggerKind(context.triggerKind),
          triggerCharacter: context.triggerCharacter
        }
      };
    }
    function asSignatureHelpTriggerKind(triggerKind) {
      switch (triggerKind) {
        case code.SignatureHelpTriggerKind.Invoke:
          return proto.SignatureHelpTriggerKind.Invoked;
        case code.SignatureHelpTriggerKind.TriggerCharacter:
          return proto.SignatureHelpTriggerKind.TriggerCharacter;
        case code.SignatureHelpTriggerKind.ContentChange:
          return proto.SignatureHelpTriggerKind.ContentChange;
      }
    }
    function asParameterInformation(value) {
      return {
        label: value.label
      };
    }
    function asParameterInformations(values) {
      return values.map(asParameterInformation);
    }
    function asSignatureInformation(value) {
      return {
        label: value.label,
        parameters: asParameterInformations(value.parameters)
      };
    }
    function asSignatureInformations(values) {
      return values.map(asSignatureInformation);
    }
    function asSignatureHelp(value) {
      if (value === undefined) {
        return value;
      }
      return {
        signatures: asSignatureInformations(value.signatures),
        activeSignature: value.activeSignature,
        activeParameter: value.activeParameter
      };
    }
    function asSignatureHelpParams(textDocument, position, context) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument),
        position: asWorkerPosition(position),
        context: {
          isRetrigger: context.isRetrigger,
          triggerCharacter: context.triggerCharacter,
          triggerKind: asSignatureHelpTriggerKind(context.triggerKind),
          activeSignatureHelp: asSignatureHelp(context.activeSignatureHelp)
        }
      };
    }
    function asWorkerPosition(position) {
      return { line: position.line, character: position.character };
    }
    function asPosition(value) {
      if (value === undefined || value === null) {
        return value;
      }
      return { line: value.line > proto.uinteger.MAX_VALUE ? proto.uinteger.MAX_VALUE : value.line, character: value.character > proto.uinteger.MAX_VALUE ? proto.uinteger.MAX_VALUE : value.character };
    }
    function asPositions(values, token) {
      return async.map(values, asPosition, token);
    }
    function asPositionsSync(values) {
      return values.map(asPosition);
    }
    function asRange(value) {
      if (value === undefined || value === null) {
        return value;
      }
      return { start: asPosition(value.start), end: asPosition(value.end) };
    }
    function asRanges(values) {
      return values.map(asRange);
    }
    function asLocation(value) {
      if (value === undefined || value === null) {
        return value;
      }
      return proto.Location.create(asUri(value.uri), asRange(value.range));
    }
    function asDiagnosticSeverity(value) {
      switch (value) {
        case code.DiagnosticSeverity.Error:
          return proto.DiagnosticSeverity.Error;
        case code.DiagnosticSeverity.Warning:
          return proto.DiagnosticSeverity.Warning;
        case code.DiagnosticSeverity.Information:
          return proto.DiagnosticSeverity.Information;
        case code.DiagnosticSeverity.Hint:
          return proto.DiagnosticSeverity.Hint;
      }
    }
    function asDiagnosticTags(tags) {
      if (!tags) {
        return;
      }
      const result = [];
      for (const tag of tags) {
        const converted = asDiagnosticTag(tag);
        if (converted !== undefined) {
          result.push(converted);
        }
      }
      return result.length > 0 ? result : undefined;
    }
    function asDiagnosticTag(tag) {
      switch (tag) {
        case code.DiagnosticTag.Unnecessary:
          return proto.DiagnosticTag.Unnecessary;
        case code.DiagnosticTag.Deprecated:
          return proto.DiagnosticTag.Deprecated;
        default:
          return;
      }
    }
    function asRelatedInformation(item) {
      return {
        message: item.message,
        location: asLocation(item.location)
      };
    }
    function asRelatedInformations(items) {
      return items.map(asRelatedInformation);
    }
    function asDiagnosticCode(value) {
      if (value === undefined || value === null) {
        return;
      }
      if (Is.number(value) || Is.string(value)) {
        return value;
      }
      return { value: value.value, target: asUri(value.target) };
    }
    function asDiagnostic(item) {
      const result = proto.Diagnostic.create(asRange(item.range), item.message);
      const protocolDiagnostic = item instanceof protocolDiagnostic_1.ProtocolDiagnostic ? item : undefined;
      if (protocolDiagnostic !== undefined && protocolDiagnostic.data !== undefined) {
        result.data = protocolDiagnostic.data;
      }
      const code2 = asDiagnosticCode(item.code);
      if (protocolDiagnostic_1.DiagnosticCode.is(code2)) {
        if (protocolDiagnostic !== undefined && protocolDiagnostic.hasDiagnosticCode) {
          result.code = code2;
        } else {
          result.code = code2.value;
          result.codeDescription = { href: code2.target };
        }
      } else {
        result.code = code2;
      }
      if (Is.number(item.severity)) {
        result.severity = asDiagnosticSeverity(item.severity);
      }
      if (Array.isArray(item.tags)) {
        result.tags = asDiagnosticTags(item.tags);
      }
      if (item.relatedInformation) {
        result.relatedInformation = asRelatedInformations(item.relatedInformation);
      }
      if (item.source) {
        result.source = item.source;
      }
      return result;
    }
    function asDiagnostics(items, token) {
      if (items === undefined || items === null) {
        return items;
      }
      return async.map(items, asDiagnostic, token);
    }
    function asDiagnosticsSync(items) {
      if (items === undefined || items === null) {
        return items;
      }
      return items.map(asDiagnostic);
    }
    function asDocumentation(format, documentation) {
      switch (format) {
        case "$string":
          return documentation;
        case proto.MarkupKind.PlainText:
          return { kind: format, value: documentation };
        case proto.MarkupKind.Markdown:
          return { kind: format, value: documentation.value };
        default:
          return `Unsupported Markup content received. Kind is: ${format}`;
      }
    }
    function asCompletionItemTag(tag) {
      switch (tag) {
        case code.CompletionItemTag.Deprecated:
          return proto.CompletionItemTag.Deprecated;
      }
      return;
    }
    function asCompletionItemTags(tags) {
      if (tags === undefined) {
        return tags;
      }
      const result = [];
      for (const tag of tags) {
        const converted = asCompletionItemTag(tag);
        if (converted !== undefined) {
          result.push(converted);
        }
      }
      return result;
    }
    function asCompletionItemKind(value, original) {
      if (original !== undefined) {
        return original;
      }
      return value + 1;
    }
    function asCompletionItem(item, labelDetailsSupport = false) {
      let label;
      let labelDetails;
      if (Is.string(item.label)) {
        label = item.label;
      } else {
        label = item.label.label;
        if (labelDetailsSupport && (item.label.detail !== undefined || item.label.description !== undefined)) {
          labelDetails = { detail: item.label.detail, description: item.label.description };
        }
      }
      const result = { label };
      if (labelDetails !== undefined) {
        result.labelDetails = labelDetails;
      }
      const protocolItem = item instanceof protocolCompletionItem_1.default ? item : undefined;
      if (item.detail) {
        result.detail = item.detail;
      }
      if (item.documentation) {
        if (!protocolItem || protocolItem.documentationFormat === "$string") {
          result.documentation = item.documentation;
        } else {
          result.documentation = asDocumentation(protocolItem.documentationFormat, item.documentation);
        }
      }
      if (item.filterText) {
        result.filterText = item.filterText;
      }
      fillPrimaryInsertText(result, item);
      if (Is.number(item.kind)) {
        result.kind = asCompletionItemKind(item.kind, protocolItem && protocolItem.originalItemKind);
      }
      if (item.sortText) {
        result.sortText = item.sortText;
      }
      if (item.additionalTextEdits) {
        result.additionalTextEdits = asTextEdits(item.additionalTextEdits);
      }
      if (item.commitCharacters) {
        result.commitCharacters = item.commitCharacters.slice();
      }
      if (item.command) {
        result.command = asCommand(item.command);
      }
      if (item.preselect === true || item.preselect === false) {
        result.preselect = item.preselect;
      }
      const tags = asCompletionItemTags(item.tags);
      if (protocolItem) {
        if (protocolItem.data !== undefined) {
          result.data = protocolItem.data;
        }
        if (protocolItem.deprecated === true || protocolItem.deprecated === false) {
          if (protocolItem.deprecated === true && tags !== undefined && tags.length > 0) {
            const index = tags.indexOf(code.CompletionItemTag.Deprecated);
            if (index !== -1) {
              tags.splice(index, 1);
            }
          }
          result.deprecated = protocolItem.deprecated;
        }
        if (protocolItem.insertTextMode !== undefined) {
          result.insertTextMode = protocolItem.insertTextMode;
        }
      }
      if (tags !== undefined && tags.length > 0) {
        result.tags = tags;
      }
      if (result.insertTextMode === undefined && item.keepWhitespace === true) {
        result.insertTextMode = proto.InsertTextMode.adjustIndentation;
      }
      return result;
    }
    function fillPrimaryInsertText(target, source) {
      let format = proto.InsertTextFormat.PlainText;
      let text = undefined;
      let range = undefined;
      if (source.textEdit) {
        text = source.textEdit.newText;
        range = source.textEdit.range;
      } else if (source.insertText instanceof code.SnippetString) {
        format = proto.InsertTextFormat.Snippet;
        text = source.insertText.value;
      } else {
        text = source.insertText;
      }
      if (source.range) {
        range = source.range;
      }
      target.insertTextFormat = format;
      if (source.fromEdit && text !== undefined && range !== undefined) {
        target.textEdit = asCompletionTextEdit(text, range);
      } else {
        target.insertText = text;
      }
    }
    function asCompletionTextEdit(newText, range) {
      if (InsertReplaceRange.is(range)) {
        return proto.InsertReplaceEdit.create(newText, asRange(range.inserting), asRange(range.replacing));
      } else {
        return { newText, range: asRange(range) };
      }
    }
    function asTextEdit(edit) {
      return { range: asRange(edit.range), newText: edit.newText };
    }
    function asTextEdits(edits) {
      if (edits === undefined || edits === null) {
        return edits;
      }
      return edits.map(asTextEdit);
    }
    function asSymbolKind(item) {
      if (item <= code.SymbolKind.TypeParameter) {
        return item + 1;
      }
      return proto.SymbolKind.Property;
    }
    function asSymbolTag(item) {
      return item;
    }
    function asSymbolTags(items) {
      return items.map(asSymbolTag);
    }
    function asReferenceParams(textDocument, position, options) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument),
        position: asWorkerPosition(position),
        context: { includeDeclaration: options.includeDeclaration }
      };
    }
    async function asCodeAction(item, token) {
      const result = proto.CodeAction.create(item.title);
      if (item instanceof protocolCodeAction_1.default && item.data !== undefined) {
        result.data = item.data;
      }
      if (item.kind !== undefined) {
        result.kind = asCodeActionKind(item.kind);
      }
      if (item.diagnostics !== undefined) {
        result.diagnostics = await asDiagnostics(item.diagnostics, token);
      }
      if (item.edit !== undefined) {
        throw new Error(`VS Code code actions can only be converted to a protocol code action without an edit.`);
      }
      if (item.command !== undefined) {
        result.command = asCommand(item.command);
      }
      if (item.isPreferred !== undefined) {
        result.isPreferred = item.isPreferred;
      }
      if (item.disabled !== undefined) {
        result.disabled = { reason: item.disabled.reason };
      }
      if (item.isAI) {
        result.tags ??= [];
        result.tags.push(proto.CodeActionTag.LLMGenerated);
      }
      return result;
    }
    function asCodeActionSync(item) {
      const result = proto.CodeAction.create(item.title);
      if (item instanceof protocolCodeAction_1.default && item.data !== undefined) {
        result.data = item.data;
      }
      if (item.kind !== undefined) {
        result.kind = asCodeActionKind(item.kind);
      }
      if (item.diagnostics !== undefined) {
        result.diagnostics = asDiagnosticsSync(item.diagnostics);
      }
      if (item.edit !== undefined) {
        throw new Error(`VS Code code actions can only be converted to a protocol code action without an edit.`);
      }
      if (item.command !== undefined) {
        result.command = asCommand(item.command);
      }
      if (item.isPreferred !== undefined) {
        result.isPreferred = item.isPreferred;
      }
      if (item.disabled !== undefined) {
        result.disabled = { reason: item.disabled.reason };
      }
      if (item.isAI) {
        result.tags ??= [];
        result.tags.push(proto.CodeActionTag.LLMGenerated);
      }
      return result;
    }
    async function asCodeActionContext(context, token) {
      if (context === undefined || context === null) {
        return context;
      }
      let only;
      if (context.only && Is.string(context.only.value)) {
        only = [context.only.value];
      }
      return proto.CodeActionContext.create(await asDiagnostics(context.diagnostics, token), only, asCodeActionTriggerKind(context.triggerKind));
    }
    function asCodeActionContextSync(context) {
      if (context === undefined || context === null) {
        return context;
      }
      let only;
      if (context.only && Is.string(context.only.value)) {
        only = [context.only.value];
      }
      return proto.CodeActionContext.create(asDiagnosticsSync(context.diagnostics), only, asCodeActionTriggerKind(context.triggerKind));
    }
    function asCodeActionTriggerKind(kind) {
      switch (kind) {
        case code.CodeActionTriggerKind.Invoke:
          return proto.CodeActionTriggerKind.Invoked;
        case code.CodeActionTriggerKind.Automatic:
          return proto.CodeActionTriggerKind.Automatic;
        default:
          return;
      }
    }
    function asCodeActionKind(item) {
      if (item === undefined || item === null) {
        return;
      }
      return item.value;
    }
    function asInlineValueContext(context) {
      return proto.InlineValueContext.create(context.frameId, asRange(context.stoppedLocation));
    }
    function asInlineCompletionParams(document, position, context) {
      return {
        textDocument: asTextDocumentIdentifier(document),
        position: asPosition(position),
        context: asInlineCompletionContext(context)
      };
    }
    function asInlineCompletionContext(context) {
      return {
        triggerKind: asInlineCompletionTriggerKind(context.triggerKind),
        selectedCompletionInfo: asSelectedCompletionInfo(context.selectedCompletionInfo)
      };
    }
    function asInlineCompletionTriggerKind(kind) {
      switch (kind) {
        case code.InlineCompletionTriggerKind.Invoke:
          return proto.InlineCompletionTriggerKind.Invoked;
        case code.InlineCompletionTriggerKind.Automatic:
          return proto.InlineCompletionTriggerKind.Automatic;
      }
    }
    function asSelectedCompletionInfo(info) {
      if (info === undefined || info === null) {
        return;
      }
      return { range: asRange(info.range), text: info.text };
    }
    function asCommand(item) {
      const result = proto.Command.create(item.title, item.command);
      if (item.tooltip) {
        result.tooltip = item.tooltip;
      }
      if (item.arguments) {
        result.arguments = item.arguments;
      }
      return result;
    }
    function asCodeLens(item) {
      const result = proto.CodeLens.create(asRange(item.range));
      if (item.command) {
        result.command = asCommand(item.command);
      }
      if (item instanceof protocolCodeLens_1.default) {
        if (item.data) {
          result.data = item.data;
        }
      }
      return result;
    }
    function asFormattingOptions(options, fileOptions) {
      const result = { tabSize: options.tabSize, insertSpaces: options.insertSpaces };
      if (fileOptions.trimTrailingWhitespace) {
        result.trimTrailingWhitespace = true;
      }
      if (fileOptions.trimFinalNewlines) {
        result.trimFinalNewlines = true;
      }
      if (fileOptions.insertFinalNewline) {
        result.insertFinalNewline = true;
      }
      return result;
    }
    function asDocumentSymbolParams(textDocument) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument)
      };
    }
    function asCodeLensParams(textDocument) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument)
      };
    }
    function asDocumentLink(item) {
      const result = proto.DocumentLink.create(asRange(item.range));
      if (item.target) {
        result.target = asUri(item.target);
      }
      if (item.tooltip !== undefined) {
        result.tooltip = item.tooltip;
      }
      const protocolItem = item instanceof protocolDocumentLink_1.default ? item : undefined;
      if (protocolItem && protocolItem.data) {
        result.data = protocolItem.data;
      }
      return result;
    }
    function asDocumentLinkParams(textDocument) {
      return {
        textDocument: asTextDocumentIdentifier(textDocument)
      };
    }
    function asCallHierarchyItem(value) {
      const result = {
        name: value.name,
        kind: asSymbolKind(value.kind),
        uri: asUri(value.uri),
        range: asRange(value.range),
        selectionRange: asRange(value.selectionRange)
      };
      if (value.detail !== undefined && value.detail.length > 0) {
        result.detail = value.detail;
      }
      if (value.tags !== undefined) {
        result.tags = asSymbolTags(value.tags);
      }
      if (value instanceof protocolCallHierarchyItem_1.default && value.data !== undefined) {
        result.data = value.data;
      }
      return result;
    }
    function asTypeHierarchyItem(value) {
      const result = {
        name: value.name,
        kind: asSymbolKind(value.kind),
        uri: asUri(value.uri),
        range: asRange(value.range),
        selectionRange: asRange(value.selectionRange)
      };
      if (value.detail !== undefined && value.detail.length > 0) {
        result.detail = value.detail;
      }
      if (value.tags !== undefined) {
        result.tags = asSymbolTags(value.tags);
      }
      if (value instanceof protocolTypeHierarchyItem_1.default && value.data !== undefined) {
        result.data = value.data;
      }
      return result;
    }
    function asWorkspaceSymbol(item) {
      const result = item instanceof protocolWorkspaceSymbol_1.default ? { name: item.name, kind: asSymbolKind(item.kind), location: item.hasRange ? asLocation(item.location) : { uri: _uriConverter(item.location.uri) }, data: item.data } : { name: item.name, kind: asSymbolKind(item.kind), location: asLocation(item.location) };
      if (item.tags !== undefined) {
        result.tags = asSymbolTags(item.tags);
      }
      if (item.containerName !== "") {
        result.containerName = item.containerName;
      }
      return result;
    }
    function asInlayHint(item) {
      const label = typeof item.label === "string" ? item.label : item.label.map(asInlayHintLabelPart);
      const result = proto.InlayHint.create(asPosition(item.position), label);
      if (item.kind !== undefined) {
        result.kind = item.kind;
      }
      if (item.textEdits !== undefined) {
        result.textEdits = asTextEdits(item.textEdits);
      }
      if (item.tooltip !== undefined) {
        result.tooltip = asTooltip(item.tooltip);
      }
      if (item.paddingLeft !== undefined) {
        result.paddingLeft = item.paddingLeft;
      }
      if (item.paddingRight !== undefined) {
        result.paddingRight = item.paddingRight;
      }
      if (item instanceof protocolInlayHint_1.default && item.data !== undefined) {
        result.data = item.data;
      }
      return result;
    }
    function asInlayHintLabelPart(item) {
      const result = proto.InlayHintLabelPart.create(item.value);
      if (item.location !== undefined) {
        result.location = asLocation(item.location);
      }
      if (item.command !== undefined) {
        result.command = asCommand(item.command);
      }
      if (item.tooltip !== undefined) {
        result.tooltip = asTooltip(item.tooltip);
      }
      return result;
    }
    function asTooltip(value) {
      if (typeof value === "string") {
        return value;
      }
      const result = {
        kind: proto.MarkupKind.Markdown,
        value: value.value
      };
      return result;
    }
    return {
      asUri,
      asTextDocumentIdentifier,
      asTextDocumentItem,
      asVersionedTextDocumentIdentifier,
      asOpenTextDocumentParams,
      asChangeTextDocumentParams,
      asCloseTextDocumentParams,
      asSaveTextDocumentParams,
      asWillSaveTextDocumentParams,
      asDidCreateFilesParams,
      asDidRenameFilesParams,
      asDidDeleteFilesParams,
      asWillCreateFilesParams,
      asWillRenameFilesParams,
      asWillDeleteFilesParams,
      asTextDocumentPositionParams,
      asCompletionParams,
      asSignatureHelpParams,
      asWorkerPosition,
      asRange,
      asRanges,
      asPosition,
      asPositions,
      asPositionsSync,
      asLocation,
      asDiagnosticSeverity,
      asDiagnosticTag,
      asDiagnostic,
      asDiagnostics,
      asDiagnosticsSync,
      asCompletionItem,
      asTextEdit,
      asSymbolKind,
      asSymbolTag,
      asSymbolTags,
      asReferenceParams,
      asCodeAction,
      asCodeActionSync,
      asCodeActionContext,
      asCodeActionContextSync,
      asInlineValueContext,
      asCommand,
      asCodeLens,
      asFormattingOptions,
      asDocumentSymbolParams,
      asCodeLensParams,
      asDocumentLink,
      asDocumentLinkParams,
      asCallHierarchyItem,
      asTypeHierarchyItem,
      asInlayHint,
      asWorkspaceSymbol,
      asInlineCompletionParams,
      asInlineCompletionContext
    };
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/protocolConverter.js
var require_protocolConverter = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.createConverter = createConverter;
  var code = __importStar(require("vscode"));
  var ls = __importStar(require_api2());
  var Is = __importStar(require_is());
  var async = __importStar(require_async());
  var protocolCompletionItem_1 = __importDefault(require_protocolCompletionItem());
  var protocolCodeLens_1 = __importDefault(require_protocolCodeLens());
  var protocolDocumentLink_1 = __importDefault(require_protocolDocumentLink());
  var protocolCodeAction_1 = __importDefault(require_protocolCodeAction());
  var protocolDiagnostic_1 = require_protocolDiagnostic();
  var protocolCallHierarchyItem_1 = __importDefault(require_protocolCallHierarchyItem());
  var protocolTypeHierarchyItem_1 = __importDefault(require_protocolTypeHierarchyItem());
  var protocolWorkspaceSymbol_1 = __importDefault(require_protocolWorkspaceSymbol());
  var protocolInlayHint_1 = __importDefault(require_protocolInlayHint());
  var vscode_languageserver_protocol_1 = require_api2();
  var CodeBlock;
  (function(CodeBlock2) {
    function is(value) {
      const candidate = value;
      return candidate && Is.string(candidate.language) && Is.string(candidate.value);
    }
    CodeBlock2.is = is;
  })(CodeBlock || (CodeBlock = {}));
  function createConverter(uriConverter, trustMarkdown, supportHtml, supportThemeIcons) {
    const nullConverter = (value) => code.Uri.parse(value);
    const _uriConverter = uriConverter || nullConverter;
    function asUri(value) {
      return _uriConverter(value);
    }
    function asDocumentSelector(selector) {
      const result = [];
      for (const filter of selector) {
        if (typeof filter === "string") {
          result.push(filter);
        } else if (vscode_languageserver_protocol_1.NotebookCellTextDocumentFilter.is(filter)) {
          if (typeof filter.notebook === "string") {
            result.push({ notebookType: filter.notebook, language: filter.language });
          } else {
            const notebookType = filter.notebook.notebookType ?? "*";
            result.push({ notebookType, scheme: filter.notebook.scheme, pattern: asGlobPattern(filter.notebook.pattern), language: filter.language });
          }
        } else if (vscode_languageserver_protocol_1.TextDocumentFilter.is(filter)) {
          result.push({ language: filter.language, scheme: filter.scheme, pattern: asGlobPattern(filter.pattern) });
        }
      }
      return result;
    }
    async function asDiagnostics(diagnostics, token) {
      return async.map(diagnostics, asDiagnostic, token);
    }
    function asDiagnosticsSync(diagnostics) {
      const result = new Array(diagnostics.length);
      for (let i = 0;i < diagnostics.length; i++) {
        result[i] = asDiagnostic(diagnostics[i]);
      }
      return result;
    }
    function asDiagnostic(diagnostic) {
      const message = typeof diagnostic.message === "string" ? diagnostic.message : diagnostic.message.kind === "plaintext" ? diagnostic.message.value : "Received a markup diagnostic message but the client does not support it.";
      const result = new protocolDiagnostic_1.ProtocolDiagnostic(asRange(diagnostic.range), message, asDiagnosticSeverity(diagnostic.severity), diagnostic.data);
      if (diagnostic.code !== undefined) {
        if (typeof diagnostic.code === "string" || typeof diagnostic.code === "number") {
          if (ls.CodeDescription.is(diagnostic.codeDescription)) {
            result.code = {
              value: diagnostic.code,
              target: asUri(diagnostic.codeDescription.href)
            };
          } else {
            result.code = diagnostic.code;
          }
        } else if (protocolDiagnostic_1.DiagnosticCode.is(diagnostic.code)) {
          result.hasDiagnosticCode = true;
          const diagnosticCode = diagnostic.code;
          result.code = {
            value: diagnosticCode.value,
            target: asUri(diagnosticCode.target)
          };
        }
      }
      if (diagnostic.source) {
        result.source = diagnostic.source;
      }
      if (diagnostic.relatedInformation) {
        result.relatedInformation = asRelatedInformation(diagnostic.relatedInformation);
      }
      if (Array.isArray(diagnostic.tags)) {
        result.tags = asDiagnosticTags(diagnostic.tags);
      }
      return result;
    }
    function asRelatedInformation(relatedInformation) {
      const result = new Array(relatedInformation.length);
      for (let i = 0;i < relatedInformation.length; i++) {
        const info = relatedInformation[i];
        result[i] = new code.DiagnosticRelatedInformation(asLocation(info.location), info.message);
      }
      return result;
    }
    function asDiagnosticTags(tags) {
      if (!tags) {
        return;
      }
      const result = [];
      for (const tag of tags) {
        const converted = asDiagnosticTag(tag);
        if (converted !== undefined) {
          result.push(converted);
        }
      }
      return result.length > 0 ? result : undefined;
    }
    function asDiagnosticTag(tag) {
      switch (tag) {
        case ls.DiagnosticTag.Unnecessary:
          return code.DiagnosticTag.Unnecessary;
        case ls.DiagnosticTag.Deprecated:
          return code.DiagnosticTag.Deprecated;
        default:
          return;
      }
    }
    function asPosition(value) {
      return value ? new code.Position(value.line, value.character) : undefined;
    }
    function asRange(value) {
      return value ? new code.Range(value.start.line, value.start.character, value.end.line, value.end.character) : undefined;
    }
    async function asRanges(items, token) {
      return async.map(items, (range) => {
        return new code.Range(range.start.line, range.start.character, range.end.line, range.end.character);
      }, token);
    }
    function asDiagnosticSeverity(value) {
      if (value === undefined || value === null) {
        return code.DiagnosticSeverity.Error;
      }
      switch (value) {
        case ls.DiagnosticSeverity.Error:
          return code.DiagnosticSeverity.Error;
        case ls.DiagnosticSeverity.Warning:
          return code.DiagnosticSeverity.Warning;
        case ls.DiagnosticSeverity.Information:
          return code.DiagnosticSeverity.Information;
        case ls.DiagnosticSeverity.Hint:
          return code.DiagnosticSeverity.Hint;
      }
      return code.DiagnosticSeverity.Error;
    }
    function asHoverContent(value) {
      if (Is.string(value)) {
        return asMarkdownString(value);
      } else if (CodeBlock.is(value)) {
        const result = asMarkdownString();
        return result.appendCodeblock(value.value, value.language);
      } else if (Array.isArray(value)) {
        const result = [];
        for (const element of value) {
          const item = asMarkdownString();
          if (CodeBlock.is(element)) {
            item.appendCodeblock(element.value, element.language);
          } else {
            item.appendMarkdown(element);
          }
          result.push(item);
        }
        return result;
      } else {
        return asMarkdownString(value);
      }
    }
    function asDocumentation(value) {
      if (Is.string(value)) {
        return value;
      } else {
        switch (value.kind) {
          case ls.MarkupKind.Markdown:
            return asMarkdownString(value.value);
          case ls.MarkupKind.PlainText:
            return value.value;
          default:
            return `Unsupported Markup content received. Kind is: ${value.kind}`;
        }
      }
    }
    function asMarkdownString(value) {
      let result;
      if (value === undefined || typeof value === "string") {
        result = new code.MarkdownString(value);
      } else {
        switch (value.kind) {
          case ls.MarkupKind.Markdown:
            result = new code.MarkdownString(value.value);
            break;
          case ls.MarkupKind.PlainText:
            result = new code.MarkdownString;
            result.appendText(value.value);
            break;
          default:
            result = new code.MarkdownString;
            result.appendText(`Unsupported Markup content received. Kind is: ${value.kind}`);
            break;
        }
      }
      result.isTrusted = trustMarkdown;
      result.supportHtml = supportHtml;
      result.supportThemeIcons = supportThemeIcons;
      return result;
    }
    function asHover(hover) {
      if (!hover) {
        return;
      }
      return new code.Hover(asHoverContent(hover.contents), asRange(hover.range));
    }
    async function asCompletionResult(value, allCommitCharacters, token) {
      if (!value) {
        return;
      }
      if (Array.isArray(value)) {
        return async.map(value, (item) => asCompletionItem(item, allCommitCharacters), token);
      }
      const list = value;
      const { defaultRange, commitCharacters } = getCompletionItemDefaults(list, allCommitCharacters);
      const converted = await async.map(list.items, (item) => {
        return asCompletionItem(item, commitCharacters, list.applyKind?.commitCharacters, defaultRange, list.itemDefaults?.insertTextMode, list.itemDefaults?.insertTextFormat, list.itemDefaults?.data, list.applyKind?.data);
      }, token);
      return new code.CompletionList(converted, list.isIncomplete);
    }
    function getCompletionItemDefaults(list, allCommitCharacters) {
      const rangeDefaults = list.itemDefaults?.editRange;
      const commitCharacters = list.itemDefaults?.commitCharacters ?? allCommitCharacters;
      return ls.Range.is(rangeDefaults) ? { defaultRange: asRange(rangeDefaults), commitCharacters } : rangeDefaults !== undefined ? { defaultRange: { inserting: asRange(rangeDefaults.insert), replacing: asRange(rangeDefaults.replace) }, commitCharacters } : { defaultRange: undefined, commitCharacters };
    }
    function asCompletionItemKind(value) {
      if (ls.CompletionItemKind.Text <= value && value <= ls.CompletionItemKind.TypeParameter) {
        return [value - 1, undefined];
      }
      return [code.CompletionItemKind.Text, value];
    }
    function asCompletionItemTag(tag) {
      switch (tag) {
        case ls.CompletionItemTag.Deprecated:
          return code.CompletionItemTag.Deprecated;
      }
      return;
    }
    function asCompletionItemTags(tags) {
      if (tags === undefined || tags === null) {
        return [];
      }
      const result = [];
      for (const tag of tags) {
        const converted = asCompletionItemTag(tag);
        if (converted !== undefined) {
          result.push(converted);
        }
      }
      return result;
    }
    function asCompletionItem(item, defaultCommitCharacters, commitCharactersApplyKind, defaultRange, defaultInsertTextMode, defaultInsertTextFormat, defaultData, dataApplyKind) {
      const tags = asCompletionItemTags(item.tags);
      const label = asCompletionItemLabel(item);
      const result = new protocolCompletionItem_1.default(label);
      if (item.detail) {
        result.detail = item.detail;
      }
      if (item.documentation) {
        result.documentation = asDocumentation(item.documentation);
        result.documentationFormat = Is.string(item.documentation) ? "$string" : item.documentation.kind;
      }
      if (item.filterText) {
        result.filterText = item.filterText;
      }
      const insertText = asCompletionInsertText(item, defaultRange, defaultInsertTextFormat);
      if (insertText) {
        result.insertText = insertText.text;
        result.range = insertText.range;
        result.fromEdit = insertText.fromEdit;
      }
      if (Is.number(item.kind)) {
        const [itemKind, original] = asCompletionItemKind(item.kind);
        result.kind = itemKind;
        if (original) {
          result.originalItemKind = original;
        }
      }
      if (item.sortText) {
        result.sortText = item.sortText;
      }
      if (item.additionalTextEdits) {
        result.additionalTextEdits = asTextEditsSync(item.additionalTextEdits);
      }
      const commitCharacters = applyCommitCharacters(item, defaultCommitCharacters, commitCharactersApplyKind);
      if (commitCharacters) {
        result.commitCharacters = commitCharacters.slice();
      }
      if (item.command) {
        result.command = asCommand(item.command);
      }
      if (item.deprecated === true || item.deprecated === false) {
        result.deprecated = item.deprecated;
        if (item.deprecated === true) {
          tags.push(code.CompletionItemTag.Deprecated);
        }
      }
      if (item.preselect === true || item.preselect === false) {
        result.preselect = item.preselect;
      }
      const data = applyData(item, defaultData, dataApplyKind);
      if (data !== undefined) {
        result.data = data;
      }
      if (tags.length > 0) {
        result.tags = tags;
      }
      const insertTextMode = item.insertTextMode ?? defaultInsertTextMode;
      if (insertTextMode !== undefined) {
        result.insertTextMode = insertTextMode;
        if (insertTextMode === ls.InsertTextMode.asIs) {
          result.keepWhitespace = true;
        }
      }
      return result;
    }
    function applyCommitCharacters(item, defaultCommitCharacters, applyKind) {
      if (applyKind === ls.ApplyKind.Merge) {
        if (!defaultCommitCharacters && !item.commitCharacters) {
          return;
        }
        const set = new Set;
        if (defaultCommitCharacters) {
          for (const char of defaultCommitCharacters) {
            set.add(char);
          }
        }
        if (Is.stringArray(item.commitCharacters)) {
          for (const char of item.commitCharacters) {
            set.add(char);
          }
        }
        return Array.from(set);
      }
      return item.commitCharacters !== undefined ? Is.stringArray(item.commitCharacters) ? item.commitCharacters : undefined : defaultCommitCharacters;
    }
    function applyData(item, defaultData, applyKind) {
      if (applyKind === ls.ApplyKind.Merge) {
        const data = {
          ...defaultData
        };
        if (item.data) {
          Object.entries(item.data).forEach(([key, value]) => {
            if (value !== undefined && value !== null) {
              data[key] = value;
            }
          });
        }
        return data;
      }
      return item.data ?? defaultData;
    }
    function asCompletionItemLabel(item) {
      if (ls.CompletionItemLabelDetails.is(item.labelDetails)) {
        return {
          label: item.label,
          detail: item.labelDetails.detail,
          description: item.labelDetails.description
        };
      } else {
        return item.label;
      }
    }
    function asCompletionInsertText(item, defaultRange, defaultInsertTextFormat) {
      const insertTextFormat = item.insertTextFormat ?? defaultInsertTextFormat;
      if (item.textEdit !== undefined || defaultRange !== undefined) {
        const [range, newText] = item.textEdit !== undefined ? getCompletionRangeAndText(item.textEdit) : [defaultRange, item.textEditText ?? item.label];
        if (insertTextFormat === ls.InsertTextFormat.Snippet) {
          return { text: new code.SnippetString(newText), range, fromEdit: true };
        } else {
          return { text: newText, range, fromEdit: true };
        }
      } else if (item.insertText) {
        if (insertTextFormat === ls.InsertTextFormat.Snippet) {
          return { text: new code.SnippetString(item.insertText), fromEdit: false };
        } else {
          return { text: item.insertText, fromEdit: false };
        }
      } else {
        return;
      }
    }
    function getCompletionRangeAndText(value) {
      if (ls.InsertReplaceEdit.is(value)) {
        return [{ inserting: asRange(value.insert), replacing: asRange(value.replace) }, value.newText];
      } else {
        return [asRange(value.range), value.newText];
      }
    }
    function asTextEdit(edit) {
      if (!edit) {
        return;
      }
      return new code.TextEdit(asRange(edit.range), edit.newText);
    }
    async function asTextEdits(items, token) {
      if (!items) {
        return;
      }
      return async.map(items, asTextEdit, token);
    }
    function asTextEditsSync(items) {
      if (!items) {
        return;
      }
      const result = new Array(items.length);
      for (let i = 0;i < items.length; i++) {
        result[i] = asTextEdit(items[i]);
      }
      return result;
    }
    async function asSignatureHelp(item, token) {
      if (!item) {
        return;
      }
      const result = new code.SignatureHelp;
      if (Is.number(item.activeSignature)) {
        result.activeSignature = item.activeSignature;
      } else {
        result.activeSignature = 0;
      }
      if (Is.number(item.activeParameter)) {
        result.activeParameter = item.activeParameter;
      } else if (item.activeParameter === null) {
        result.activeParameter = -1;
      } else {
        result.activeParameter = 0;
      }
      if (item.signatures) {
        result.signatures = await asSignatureInformations(item.signatures, token);
      }
      return result;
    }
    async function asSignatureInformations(items, token) {
      return async.mapAsync(items, asSignatureInformation, token);
    }
    async function asSignatureInformation(item, token) {
      const result = new code.SignatureInformation(item.label);
      if (item.documentation !== undefined) {
        result.documentation = asDocumentation(item.documentation);
      }
      if (item.parameters !== undefined) {
        result.parameters = await asParameterInformations(item.parameters, token);
      }
      if (item.activeParameter !== undefined) {
        result.activeParameter = item.activeParameter ?? -1;
      }
      {
        return result;
      }
    }
    function asParameterInformations(items, token) {
      return async.map(items, asParameterInformation, token);
    }
    function asParameterInformation(item) {
      const result = new code.ParameterInformation(item.label);
      if (item.documentation) {
        result.documentation = asDocumentation(item.documentation);
      }
      return result;
    }
    function asLocation(item) {
      return item ? new code.Location(_uriConverter(item.uri), asRange(item.range)) : undefined;
    }
    async function asDeclarationResult(item, token) {
      if (!item) {
        return;
      }
      return asLocationResult(item, token);
    }
    async function asDefinitionResult(item, token) {
      if (!item) {
        return;
      }
      return asLocationResult(item, token);
    }
    function asLocationLink(item) {
      if (!item) {
        return;
      }
      const result = {
        targetUri: _uriConverter(item.targetUri),
        targetRange: asRange(item.targetRange),
        originSelectionRange: asRange(item.originSelectionRange),
        targetSelectionRange: asRange(item.targetSelectionRange)
      };
      if (!result.targetSelectionRange) {
        throw new Error(`targetSelectionRange must not be undefined or null`);
      }
      return result;
    }
    async function asLocationResult(item, token) {
      if (!item) {
        return;
      }
      if (Is.array(item)) {
        if (item.length === 0) {
          return [];
        } else if (ls.LocationLink.is(item[0])) {
          const links = item;
          return async.map(links, asLocationLink, token);
        } else {
          const locations = item;
          return async.map(locations, asLocation, token);
        }
      } else if (ls.LocationLink.is(item)) {
        return [asLocationLink(item)];
      } else {
        return asLocation(item);
      }
    }
    async function asReferences(values, token) {
      if (!values) {
        return;
      }
      return async.map(values, asLocation, token);
    }
    async function asDocumentHighlights(values, token) {
      if (!values) {
        return;
      }
      return async.map(values, asDocumentHighlight, token);
    }
    function asDocumentHighlight(item) {
      const result = new code.DocumentHighlight(asRange(item.range));
      if (Is.number(item.kind)) {
        result.kind = asDocumentHighlightKind(item.kind);
      }
      return result;
    }
    function asDocumentHighlightKind(item) {
      switch (item) {
        case ls.DocumentHighlightKind.Text:
          return code.DocumentHighlightKind.Text;
        case ls.DocumentHighlightKind.Read:
          return code.DocumentHighlightKind.Read;
        case ls.DocumentHighlightKind.Write:
          return code.DocumentHighlightKind.Write;
      }
      return code.DocumentHighlightKind.Text;
    }
    async function asSymbolInformations(values, token) {
      if (!values) {
        return;
      }
      return async.map(values, asSymbolInformation, token);
    }
    function asSymbolKind(item) {
      if (item <= ls.SymbolKind.TypeParameter) {
        return item - 1;
      }
      return code.SymbolKind.Property;
    }
    function asSymbolTag(value) {
      switch (value) {
        case ls.SymbolTag.Deprecated:
          return code.SymbolTag.Deprecated;
        default:
          return;
      }
    }
    function asSymbolTags(items) {
      if (items === undefined || items === null) {
        return;
      }
      const result = [];
      for (const item of items) {
        const converted = asSymbolTag(item);
        if (converted !== undefined) {
          result.push(converted);
        }
      }
      return result.length === 0 ? undefined : result;
    }
    function asSymbolInformation(item) {
      const data = item.data;
      const location = item.location;
      const result = location.range === undefined || data !== undefined ? new protocolWorkspaceSymbol_1.default(item.name, asSymbolKind(item.kind), item.containerName ?? "", location.range === undefined ? _uriConverter(location.uri) : new code.Location(_uriConverter(item.location.uri), asRange(location.range)), data) : new code.SymbolInformation(item.name, asSymbolKind(item.kind), item.containerName ?? "", new code.Location(_uriConverter(item.location.uri), asRange(location.range)));
      fillTags(result, item);
      return result;
    }
    async function asDocumentSymbols(values, token) {
      if (values === undefined || values === null) {
        return;
      }
      return async.map(values, asDocumentSymbol, token);
    }
    function asDocumentSymbol(value) {
      const result = new code.DocumentSymbol(value.name, value.detail || "", asSymbolKind(value.kind), asRange(value.range), asRange(value.selectionRange));
      fillTags(result, value);
      if (value.children !== undefined && value.children.length > 0) {
        const children = [];
        for (const child of value.children) {
          children.push(asDocumentSymbol(child));
        }
        result.children = children;
      }
      return result;
    }
    function fillTags(result, value) {
      result.tags = asSymbolTags(value.tags);
      if (value.deprecated) {
        if (!result.tags) {
          result.tags = [code.SymbolTag.Deprecated];
        } else {
          if (!result.tags.includes(code.SymbolTag.Deprecated)) {
            result.tags = result.tags.concat(code.SymbolTag.Deprecated);
          }
        }
      }
    }
    function asCommand(item) {
      const result = { title: item.title, command: item.command };
      if (item.tooltip) {
        result.tooltip = item.tooltip;
      }
      if (item.arguments) {
        result.arguments = item.arguments;
      }
      return result;
    }
    async function asCommands(items, token) {
      if (!items) {
        return;
      }
      return async.map(items, asCommand, token);
    }
    const kindMapping = new Map;
    kindMapping.set(ls.CodeActionKind.Empty, code.CodeActionKind.Empty);
    kindMapping.set(ls.CodeActionKind.QuickFix, code.CodeActionKind.QuickFix);
    kindMapping.set(ls.CodeActionKind.Refactor, code.CodeActionKind.Refactor);
    kindMapping.set(ls.CodeActionKind.RefactorExtract, code.CodeActionKind.RefactorExtract);
    kindMapping.set(ls.CodeActionKind.RefactorInline, code.CodeActionKind.RefactorInline);
    kindMapping.set(ls.CodeActionKind.RefactorRewrite, code.CodeActionKind.RefactorRewrite);
    kindMapping.set(ls.CodeActionKind.Source, code.CodeActionKind.Source);
    kindMapping.set(ls.CodeActionKind.SourceOrganizeImports, code.CodeActionKind.SourceOrganizeImports);
    function asCodeActionKind(item) {
      if (item === undefined || item === null) {
        return;
      }
      let result = kindMapping.get(item);
      if (result) {
        return result;
      }
      const parts = item.split(".");
      result = code.CodeActionKind.Empty;
      for (const part of parts) {
        result = result.append(part);
      }
      return result;
    }
    function asCodeActionKinds(items) {
      if (items === undefined || items === null) {
        return;
      }
      return items.map((kind) => asCodeActionKind(kind));
    }
    function asCodeActionDocumentations(items) {
      if (items === undefined || items === null) {
        return;
      }
      return items.map((doc) => ({ kind: asCodeActionKind(doc.kind), command: asCommand(doc.command) }));
    }
    async function asCodeAction(item, token) {
      if (item === undefined || item === null) {
        return;
      }
      const result = new protocolCodeAction_1.default(item.title, item.data);
      if (item.kind !== undefined) {
        result.kind = asCodeActionKind(item.kind);
      }
      if (item.diagnostics !== undefined) {
        result.diagnostics = asDiagnosticsSync(item.diagnostics);
      }
      if (item.edit !== undefined) {
        result.edit = await asWorkspaceEdit(item.edit, token);
      }
      if (item.command !== undefined) {
        result.command = asCommand(item.command);
      }
      if (item.isPreferred !== undefined) {
        result.isPreferred = item.isPreferred;
      }
      if (item.disabled !== undefined) {
        result.disabled = { reason: item.disabled.reason };
      }
      if (item.tags?.includes(ls.CodeActionTag.LLMGenerated)) {
        result.isAI = true;
      }
      return result;
    }
    function asCodeActionResult(items, token) {
      return async.mapAsync(items, async (item) => {
        if (ls.Command.is(item)) {
          return asCommand(item);
        } else {
          return asCodeAction(item, token);
        }
      }, token);
    }
    function asCodeLens(item) {
      if (!item) {
        return;
      }
      const result = new protocolCodeLens_1.default(asRange(item.range));
      if (item.command) {
        result.command = asCommand(item.command);
      }
      if (item.data !== undefined && item.data !== null) {
        result.data = item.data;
      }
      return result;
    }
    async function asCodeLenses(items, token) {
      if (!items) {
        return;
      }
      return async.map(items, asCodeLens, token);
    }
    async function asWorkspaceEdit(item, token) {
      if (!item) {
        return;
      }
      const sharedMetadata = new Map;
      if (item.changeAnnotations !== undefined) {
        const changeAnnotations = item.changeAnnotations;
        await async.forEach(Object.keys(changeAnnotations), (key) => {
          const metaData = asWorkspaceEditEntryMetadata(changeAnnotations[key]);
          sharedMetadata.set(key, metaData);
        }, token);
      }
      const asMetadata = (annotation) => {
        if (annotation === undefined) {
          return;
        } else {
          return sharedMetadata.get(annotation);
        }
      };
      const result = new code.WorkspaceEdit;
      if (item.documentChanges) {
        const documentChanges = item.documentChanges;
        await async.forEach(documentChanges, (change) => {
          if (ls.CreateFile.is(change)) {
            result.createFile(_uriConverter(change.uri), change.options, asMetadata(change.annotationId));
          } else if (ls.RenameFile.is(change)) {
            result.renameFile(_uriConverter(change.oldUri), _uriConverter(change.newUri), change.options, asMetadata(change.annotationId));
          } else if (ls.DeleteFile.is(change)) {
            result.deleteFile(_uriConverter(change.uri), change.options, asMetadata(change.annotationId));
          } else if (ls.TextDocumentEdit.is(change)) {
            const uri = _uriConverter(change.textDocument.uri);
            const edits = [];
            for (const edit of change.edits) {
              if (ls.AnnotatedTextEdit.is(edit)) {
                edits.push([new code.TextEdit(asRange(edit.range), edit.newText), asMetadata(edit.annotationId)]);
              } else if (ls.SnippetTextEdit.is(edit)) {
                edits.push([new code.SnippetTextEdit(asRange(edit.range), new code.SnippetString(edit.snippet.value)), asMetadata(edit.annotationId)]);
              } else {
                edits.push([new code.TextEdit(asRange(edit.range), edit.newText), undefined]);
              }
            }
            result.set(uri, edits);
          } else {
            throw new Error(`Unknown workspace edit change received:
${JSON.stringify(change, undefined, 4)}`);
          }
        }, token);
      } else if (item.changes) {
        const changes = item.changes;
        await async.forEach(Object.keys(changes), (key) => {
          result.set(_uriConverter(key), asTextEditsSync(changes[key]));
        }, token);
      }
      return result;
    }
    function asWorkspaceEditEntryMetadata(annotation) {
      if (annotation === undefined) {
        return;
      }
      return { label: annotation.label, needsConfirmation: !!annotation.needsConfirmation, description: annotation.description };
    }
    function asDocumentLink(item) {
      const range = asRange(item.range);
      const target = item.target ? asUri(item.target) : undefined;
      const link = new protocolDocumentLink_1.default(range, target);
      if (item.tooltip !== undefined) {
        link.tooltip = item.tooltip;
      }
      if (item.data !== undefined && item.data !== null) {
        link.data = item.data;
      }
      return link;
    }
    async function asDocumentLinks(items, token) {
      if (!items) {
        return;
      }
      return async.map(items, asDocumentLink, token);
    }
    function asColor(color) {
      return new code.Color(color.red, color.green, color.blue, color.alpha);
    }
    function asColorInformation(ci) {
      return new code.ColorInformation(asRange(ci.range), asColor(ci.color));
    }
    async function asColorInformations(colorInformation, token) {
      if (!colorInformation) {
        return;
      }
      return async.map(colorInformation, asColorInformation, token);
    }
    function asColorPresentation(cp) {
      const presentation = new code.ColorPresentation(cp.label);
      presentation.additionalTextEdits = asTextEditsSync(cp.additionalTextEdits);
      if (cp.textEdit) {
        presentation.textEdit = asTextEdit(cp.textEdit);
      }
      return presentation;
    }
    async function asColorPresentations(colorPresentations, token) {
      if (!colorPresentations) {
        return;
      }
      return async.map(colorPresentations, asColorPresentation, token);
    }
    function asFoldingRangeKind(kind) {
      if (kind) {
        switch (kind) {
          case ls.FoldingRangeKind.Comment:
            return code.FoldingRangeKind.Comment;
          case ls.FoldingRangeKind.Imports:
            return code.FoldingRangeKind.Imports;
          case ls.FoldingRangeKind.Region:
            return code.FoldingRangeKind.Region;
        }
      }
      return;
    }
    function asFoldingRange(r) {
      return new code.FoldingRange(r.startLine, r.endLine, asFoldingRangeKind(r.kind));
    }
    async function asFoldingRanges(foldingRanges, token) {
      if (!foldingRanges) {
        return;
      }
      return async.map(foldingRanges, asFoldingRange, token);
    }
    function asSelectionRange(selectionRange) {
      return new code.SelectionRange(asRange(selectionRange.range), selectionRange.parent ? asSelectionRange(selectionRange.parent) : undefined);
    }
    async function asSelectionRanges(selectionRanges, token) {
      if (!Array.isArray(selectionRanges)) {
        return [];
      }
      return async.map(selectionRanges, asSelectionRange, token);
    }
    function asInlineValue(inlineValue) {
      if (ls.InlineValueText.is(inlineValue)) {
        return new code.InlineValueText(asRange(inlineValue.range), inlineValue.text);
      } else if (ls.InlineValueVariableLookup.is(inlineValue)) {
        return new code.InlineValueVariableLookup(asRange(inlineValue.range), inlineValue.variableName, inlineValue.caseSensitiveLookup);
      } else {
        return new code.InlineValueEvaluatableExpression(asRange(inlineValue.range), inlineValue.expression);
      }
    }
    async function asInlineValues(inlineValues, token) {
      if (!Array.isArray(inlineValues)) {
        return [];
      }
      return async.map(inlineValues, asInlineValue, token);
    }
    async function asInlayHint(value, token) {
      const label = typeof value.label === "string" ? value.label : await async.map(value.label, asInlayHintLabelPart, token);
      const result = new protocolInlayHint_1.default(asPosition(value.position), label);
      if (value.kind !== undefined) {
        result.kind = value.kind;
      }
      if (value.textEdits !== undefined) {
        result.textEdits = await asTextEdits(value.textEdits, token);
      }
      if (value.tooltip !== undefined) {
        result.tooltip = asTooltip(value.tooltip);
      }
      if (value.paddingLeft !== undefined) {
        result.paddingLeft = value.paddingLeft;
      }
      if (value.paddingRight !== undefined) {
        result.paddingRight = value.paddingRight;
      }
      if (value.data !== undefined) {
        result.data = value.data;
      }
      return result;
    }
    function asInlayHintLabelPart(part) {
      const result = new code.InlayHintLabelPart(part.value);
      if (part.location !== undefined) {
        result.location = asLocation(part.location);
      }
      if (part.tooltip !== undefined) {
        result.tooltip = asTooltip(part.tooltip);
      }
      if (part.command !== undefined) {
        result.command = asCommand(part.command);
      }
      return result;
    }
    function asTooltip(value) {
      if (typeof value === "string") {
        return value;
      }
      return asMarkdownString(value);
    }
    async function asInlayHints(values, token) {
      if (!Array.isArray(values)) {
        return;
      }
      return async.mapAsync(values, asInlayHint, token);
    }
    function asCallHierarchyItem(item) {
      if (item === null) {
        return;
      }
      const result = new protocolCallHierarchyItem_1.default(asSymbolKind(item.kind), item.name, item.detail || "", asUri(item.uri), asRange(item.range), asRange(item.selectionRange), item.data);
      if (item.tags !== undefined) {
        result.tags = asSymbolTags(item.tags);
      }
      return result;
    }
    async function asCallHierarchyItems(items, token) {
      if (items === null) {
        return;
      }
      return async.map(items, asCallHierarchyItem, token);
    }
    async function asCallHierarchyIncomingCall(item, token) {
      return new code.CallHierarchyIncomingCall(asCallHierarchyItem(item.from), await asRanges(item.fromRanges, token));
    }
    async function asCallHierarchyIncomingCalls(items, token) {
      if (items === null) {
        return;
      }
      return async.mapAsync(items, asCallHierarchyIncomingCall, token);
    }
    async function asCallHierarchyOutgoingCall(item, token) {
      return new code.CallHierarchyOutgoingCall(asCallHierarchyItem(item.to), await asRanges(item.fromRanges, token));
    }
    async function asCallHierarchyOutgoingCalls(items, token) {
      if (items === null) {
        return;
      }
      return async.mapAsync(items, asCallHierarchyOutgoingCall, token);
    }
    async function asSemanticTokens(value, _token) {
      if (value === undefined || value === null) {
        return;
      }
      return new code.SemanticTokens(new Uint32Array(value.data), value.resultId);
    }
    function asSemanticTokensEdit(value) {
      return new code.SemanticTokensEdit(value.start, value.deleteCount, value.data !== undefined ? new Uint32Array(value.data) : undefined);
    }
    async function asSemanticTokensEdits(value, _token) {
      if (value === undefined || value === null) {
        return;
      }
      return new code.SemanticTokensEdits(value.edits.map(asSemanticTokensEdit), value.resultId);
    }
    function asSemanticTokensLegend(value) {
      return value;
    }
    async function asLinkedEditingRanges(value, token) {
      if (value === null || value === undefined) {
        return;
      }
      return new code.LinkedEditingRanges(await asRanges(value.ranges, token), asRegularExpression(value.wordPattern));
    }
    function asRegularExpression(value) {
      if (value === null || value === undefined) {
        return;
      }
      return new RegExp(value);
    }
    function asTypeHierarchyItem(item) {
      if (item === null) {
        return;
      }
      const result = new protocolTypeHierarchyItem_1.default(asSymbolKind(item.kind), item.name, item.detail || "", asUri(item.uri), asRange(item.range), asRange(item.selectionRange), item.data);
      if (item.tags !== undefined) {
        result.tags = asSymbolTags(item.tags);
      }
      return result;
    }
    async function asTypeHierarchyItems(items, token) {
      if (items === null) {
        return;
      }
      return async.map(items, asTypeHierarchyItem, token);
    }
    function asGlobPattern(pattern) {
      if (Is.string(pattern)) {
        return pattern;
      }
      if (ls.RelativePattern.is(pattern)) {
        if (ls.URI.is(pattern.baseUri)) {
          return new code.RelativePattern(asUri(pattern.baseUri), pattern.pattern);
        } else if (ls.WorkspaceFolder.is(pattern.baseUri)) {
          const workspaceFolder = code.workspace.getWorkspaceFolder(asUri(pattern.baseUri.uri));
          return workspaceFolder !== undefined ? new code.RelativePattern(workspaceFolder, pattern.pattern) : undefined;
        }
      }
      return;
    }
    async function asInlineCompletionResult(value, token) {
      if (!value) {
        return;
      }
      if (Array.isArray(value)) {
        return async.map(value, (item) => asInlineCompletionItem(item), token);
      }
      const list = value;
      const converted = await async.map(list.items, (item) => {
        return asInlineCompletionItem(item);
      }, token);
      return new code.InlineCompletionList(converted);
    }
    function asInlineCompletionItem(item) {
      let insertText;
      if (typeof item.insertText === "string") {
        insertText = item.insertText;
      } else {
        insertText = new code.SnippetString(item.insertText.value);
      }
      let command = undefined;
      if (item.command) {
        command = asCommand(item.command);
      }
      const inlineCompletionItem = new code.InlineCompletionItem(insertText, asRange(item.range), command);
      if (item.filterText) {
        inlineCompletionItem.filterText = item.filterText;
      }
      return inlineCompletionItem;
    }
    return {
      asUri,
      asDocumentSelector,
      asDiagnostics,
      asDiagnostic,
      asRange,
      asRanges,
      asPosition,
      asDiagnosticSeverity,
      asDiagnosticTag,
      asHover,
      asCompletionResult,
      asCompletionItem,
      asTextEdit,
      asTextEdits,
      asSignatureHelp,
      asSignatureInformations,
      asSignatureInformation,
      asParameterInformations,
      asParameterInformation,
      asDeclarationResult,
      asDefinitionResult,
      asLocation,
      asReferences,
      asDocumentHighlights,
      asDocumentHighlight,
      asDocumentHighlightKind,
      asSymbolKind,
      asSymbolTag,
      asSymbolTags,
      asSymbolInformations,
      asSymbolInformation,
      asDocumentSymbols,
      asDocumentSymbol,
      asCommand,
      asCommands,
      asCodeAction,
      asCodeActionKind,
      asCodeActionKinds,
      asCodeActionDocumentations,
      asCodeActionResult,
      asCodeLens,
      asCodeLenses,
      asWorkspaceEdit,
      asDocumentLink,
      asDocumentLinks,
      asFoldingRangeKind,
      asFoldingRange,
      asFoldingRanges,
      asColor,
      asColorInformation,
      asColorInformations,
      asColorPresentation,
      asColorPresentations,
      asSelectionRange,
      asSelectionRanges,
      asInlineValue,
      asInlineValues,
      asInlayHint,
      asInlayHints,
      asSemanticTokensLegend,
      asSemanticTokens,
      asSemanticTokensEdit,
      asSemanticTokensEdits,
      asCallHierarchyItem,
      asCallHierarchyItems,
      asCallHierarchyIncomingCall,
      asCallHierarchyIncomingCalls,
      asCallHierarchyOutgoingCall,
      asCallHierarchyOutgoingCalls,
      asLinkedEditingRanges,
      asTypeHierarchyItem,
      asTypeHierarchyItems,
      asGlobPattern,
      asInlineCompletionResult,
      asInlineCompletionItem
    };
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/utils/uuid.js
var require_uuid = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.empty = undefined;
  exports2.v4 = v4;
  exports2.isUUID = isUUID;
  exports2.parse = parse;
  exports2.generateUuid = generateUuid;

  class ValueUUID {
    _value;
    constructor(_value) {
      this._value = _value;
    }
    asHex() {
      return this._value;
    }
    equals(other) {
      return this.asHex() === other.asHex();
    }
  }

  class V4UUID extends ValueUUID {
    static _chars = ["0", "1", "2", "3", "4", "5", "6", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
    static _timeHighBits = ["8", "9", "a", "b"];
    static _oneOf(array) {
      return array[Math.floor(array.length * Math.random())];
    }
    static _randomHex() {
      return V4UUID._oneOf(V4UUID._chars);
    }
    constructor() {
      super([
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        "-",
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        "-",
        "4",
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        "-",
        V4UUID._oneOf(V4UUID._timeHighBits),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        "-",
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex(),
        V4UUID._randomHex()
      ].join(""));
    }
  }
  exports2.empty = new ValueUUID("00000000-0000-0000-0000-000000000000");
  function v4() {
    return new V4UUID;
  }
  var _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
  function isUUID(value) {
    return _UUIDPattern.test(value);
  }
  function parse(value) {
    if (!isUUID(value)) {
      throw new Error("invalid uuid");
    }
    return new ValueUUID(value);
  }
  function generateUuid() {
    return v4().asHex();
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/progressPart.js
var require_progressPart = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ProgressPart = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var Is = __importStar(require_is());

  class ProgressPart {
    _client;
    _token;
    _infinite;
    _reported;
    _lspProgressDisposable;
    _progress;
    _cancellationToken;
    _tokenDisposable;
    _resolve;
    _reject;
    constructor(_client, _token, done) {
      this._client = _client;
      this._token = _token;
      this._reported = 0;
      this._infinite = false;
      this._lspProgressDisposable = this._client.onProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, (value) => {
        switch (value.kind) {
          case "begin":
            this.begin(value);
            break;
          case "report":
            this.report(value);
            break;
          case "end":
            this.done();
            done && done(this);
            break;
        }
      });
    }
    begin(params) {
      this._infinite = params.percentage === undefined;
      if (this._lspProgressDisposable === undefined) {
        return;
      }
      vscode_1.window.withProgress({ location: vscode_1.ProgressLocation.Window, cancellable: params.cancellable, title: params.title }, async (progress, cancellationToken) => {
        if (this._lspProgressDisposable === undefined) {
          return;
        }
        this._progress = progress;
        this._cancellationToken = cancellationToken;
        this._tokenDisposable = this._cancellationToken.onCancellationRequested(() => {
          this._client.sendNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, { token: this._token });
        });
        this.report(params);
        return new Promise((resolve, reject) => {
          this._resolve = resolve;
          this._reject = reject;
        });
      });
    }
    report(params) {
      if (this._infinite && Is.string(params.message)) {
        this._progress !== undefined && this._progress.report({ message: params.message });
      } else if (Is.number(params.percentage)) {
        const percentage = Math.max(0, Math.min(params.percentage, 100));
        const delta = Math.max(0, percentage - this._reported);
        this._reported += delta;
        this._progress !== undefined && this._progress.report({ message: params.message, increment: delta });
      }
    }
    cancel() {
      this.cleanup();
      if (this._reject !== undefined) {
        this._reject();
        this._resolve = undefined;
        this._reject = undefined;
      }
    }
    done() {
      this.cleanup();
      if (this._resolve !== undefined) {
        this._resolve();
        this._resolve = undefined;
        this._reject = undefined;
      }
    }
    cleanup() {
      if (this._lspProgressDisposable !== undefined) {
        this._lspProgressDisposable.dispose();
        this._lspProgressDisposable = undefined;
      }
      if (this._tokenDisposable !== undefined) {
        this._tokenDisposable.dispose();
        this._tokenDisposable = undefined;
      }
      this._progress = undefined;
      this._cancellationToken = undefined;
    }
  }
  exports2.ProgressPart = ProgressPart;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/features.js
var require_features = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DefaultDiagnosticCollectionProvider = exports2.DiagnosticCollectionSource = exports2.WorkspaceFeature = exports2.TextDocumentLanguageFeature = exports2.TextDocumentEventFeature = exports2.DynamicDocumentFeature = exports2.DynamicFeature = exports2.StaticFeature = exports2.LSPCancellationError = undefined;
  exports2.ensure = ensure;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var Is = __importStar(require_is());
  var UUID = __importStar(require_uuid());

  class LSPCancellationError extends vscode_1.CancellationError {
    data;
    constructor(data) {
      super();
      this.data = data;
    }
  }
  exports2.LSPCancellationError = LSPCancellationError;
  function ensure(target, key) {
    if (target[key] === undefined) {
      target[key] = {};
    }
    return target[key];
  }
  var StaticFeature;
  (function(StaticFeature2) {
    function is(value) {
      const candidate = value;
      return candidate !== undefined && candidate !== null && Is.func(candidate.fillClientCapabilities) && Is.func(candidate.initialize) && Is.func(candidate.getState) && Is.func(candidate.clear) && (candidate.fillInitializeParams === undefined || Is.func(candidate.fillInitializeParams));
    }
    StaticFeature2.is = is;
  })(StaticFeature || (exports2.StaticFeature = StaticFeature = {}));
  var DynamicFeature;
  (function(DynamicFeature2) {
    function is(value) {
      const candidate = value;
      return candidate !== undefined && candidate !== null && Is.func(candidate.fillClientCapabilities) && Is.func(candidate.initialize) && Is.func(candidate.getState) && Is.func(candidate.clear) && (candidate.fillInitializeParams === undefined || Is.func(candidate.fillInitializeParams)) && Is.func(candidate.register) && Is.func(candidate.unregister) && candidate.registrationType !== undefined;
    }
    DynamicFeature2.is = is;
  })(DynamicFeature || (exports2.DynamicFeature = DynamicFeature = {}));

  class DynamicDocumentFeature {
    _client;
    constructor(client) {
      this._client = client;
    }
    getState() {
      const selectors = this.getDocumentSelectors();
      let count = 0;
      for (const selector of selectors) {
        count++;
        for (const document of vscode_1.workspace.textDocuments) {
          if (vscode_1.languages.match(selector, document) > 0) {
            return { kind: "document", id: this.registrationType.method, registrations: true, matches: true };
          }
        }
      }
      const registrations = count > 0;
      return { kind: "document", id: this.registrationType.method, registrations, matches: false };
    }
  }
  exports2.DynamicDocumentFeature = DynamicDocumentFeature;

  class TextDocumentEventFeature extends DynamicDocumentFeature {
    _event;
    _type;
    _middleware;
    _createParams;
    _textDocument;
    _selectorFilter;
    _listener;
    _selectors;
    _onAboutToSendNotification;
    _onNotificationSent;
    static textDocumentFilter(selectors, textDocument) {
      for (const selector of selectors) {
        if (vscode_1.languages.match(selector, textDocument) > 0) {
          return true;
        }
      }
      return false;
    }
    constructor(client, event, type, middleware, createParams, textDocument, selectorFilter) {
      super(client);
      this._event = event;
      this._type = type;
      this._middleware = middleware;
      this._createParams = createParams;
      this._textDocument = textDocument;
      this._selectorFilter = selectorFilter;
      this._selectors = new Map;
      this._onAboutToSendNotification = new vscode_1.EventEmitter;
      this._onNotificationSent = new vscode_1.EventEmitter;
    }
    getStateInfo() {
      return [this._selectors.values(), false];
    }
    getDocumentSelectors() {
      return this._selectors.values();
    }
    register(data) {
      if (!data.registerOptions.documentSelector) {
        return;
      }
      if (!this._listener) {
        this._listener = this._event((data2) => {
          this.callback(data2).catch((error) => {
            this._client.error(`Sending document notification ${this._type.method} failed.`, error);
          });
        });
      }
      this._selectors.set(data.id, this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector));
    }
    async callback(data) {
      const doSend = async (data2) => {
        const textDocument = this.getTextDocument(data2);
        const params = this._createParams(data2);
        this.aboutToSendNotification(textDocument, this._type, params);
        await this._client.sendNotification(this._type, params);
        this.notificationSent(textDocument, this._type, params);
      };
      if (this.matches(data)) {
        const middleware = this._middleware();
        return middleware ? middleware(data, (data2) => doSend(data2)) : doSend(data);
      }
    }
    matches(data) {
      if (this._client.hasDedicatedTextSynchronizationFeature(this._textDocument(data))) {
        return false;
      }
      return !this._selectorFilter || this._selectorFilter(this._selectors.values(), data);
    }
    get onAboutToSendNotification() {
      return this._onAboutToSendNotification.event;
    }
    aboutToSendNotification(textDocument, type, params) {
      this._onAboutToSendNotification.fire({ textDocument, type, params });
    }
    get onNotificationSent() {
      return this._onNotificationSent.event;
    }
    notificationSent(textDocument, type, params) {
      this._onNotificationSent.fire({ textDocument, type, params });
    }
    unregister(id) {
      this._selectors.delete(id);
      if (this._selectors.size === 0 && this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    clear() {
      this._selectors.clear();
      this._onNotificationSent.dispose();
      this._onNotificationSent = new vscode_1.EventEmitter;
      if (this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    getProvider(document) {
      for (const selector of this._selectors.values()) {
        if (vscode_1.languages.match(selector, document) > 0) {
          return {
            send: (data) => {
              return this.callback(data);
            }
          };
        }
      }
      return;
    }
  }
  exports2.TextDocumentEventFeature = TextDocumentEventFeature;

  class TextDocumentLanguageFeature extends DynamicDocumentFeature {
    _registrationType;
    _registrations;
    constructor(client, registrationType) {
      super(client);
      this._registrationType = registrationType;
      this._registrations = new Map;
    }
    *getDocumentSelectors() {
      for (const registration of this._registrations.values()) {
        const selector = registration.data.registerOptions.documentSelector;
        if (selector === null) {
          continue;
        }
        yield this._client.protocol2CodeConverter.asDocumentSelector(selector);
      }
    }
    get registrationType() {
      return this._registrationType;
    }
    register(data) {
      if (!data.registerOptions.documentSelector) {
        return;
      }
      const registration = this.registerLanguageProvider(data.registerOptions, data.id);
      this._registrations.set(data.id, { disposable: registration[0], data, provider: registration[1] });
    }
    unregister(id) {
      const registration = this._registrations.get(id);
      if (registration !== undefined) {
        this._registrations.delete(id);
        registration.disposable.dispose();
      }
    }
    clear() {
      this._registrations.forEach((value) => {
        value.disposable.dispose();
      });
      this._registrations.clear();
    }
    getRegistration(documentSelector, capability) {
      if (!capability) {
        return [undefined, undefined];
      } else if (vscode_languageserver_protocol_1.TextDocumentRegistrationOptions.is(capability)) {
        const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();
        const selector = capability.documentSelector ?? documentSelector;
        if (selector) {
          return [id, Object.assign({}, capability, { documentSelector: selector })];
        }
      } else if (Is.boolean(capability) && capability === true || vscode_languageserver_protocol_1.WorkDoneProgressOptions.is(capability)) {
        if (!documentSelector) {
          return [undefined, undefined];
        }
        const options = Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector });
        return [UUID.generateUuid(), options];
      }
      return [undefined, undefined];
    }
    getRegistrationOptions(documentSelector, capability) {
      if (!documentSelector || !capability) {
        return;
      }
      return Is.boolean(capability) && capability === true ? { documentSelector } : Object.assign({}, capability, { documentSelector });
    }
    getProvider(textDocument) {
      for (const registration of this._registrations.values()) {
        const selector = registration.data.registerOptions.documentSelector;
        if (selector !== null && vscode_1.languages.match(this._client.protocol2CodeConverter.asDocumentSelector(selector), textDocument) > 0) {
          return registration.provider;
        }
      }
      return;
    }
    getAllProviders() {
      const result = [];
      for (const item of this._registrations.values()) {
        result.push(item.provider);
      }
      return result;
    }
  }
  exports2.TextDocumentLanguageFeature = TextDocumentLanguageFeature;

  class WorkspaceFeature {
    _client;
    _registrationType;
    _registrations;
    constructor(client, registrationType) {
      this._client = client;
      this._registrationType = registrationType;
      this._registrations = new Map;
    }
    getState() {
      const registrations = this._registrations.size > 0;
      return { kind: "workspace", id: this._registrationType.method, registrations };
    }
    get registrationType() {
      return this._registrationType;
    }
    register(data) {
      const registration = this.registerLanguageProvider(data.registerOptions);
      this._registrations.set(data.id, { disposable: registration[0], provider: registration[1] });
    }
    unregister(id) {
      const registration = this._registrations.get(id);
      if (registration !== undefined) {
        this._registrations.delete(id);
        registration.disposable.dispose();
      }
    }
    clear() {
      this._registrations.forEach((registration) => {
        registration.disposable.dispose();
      });
      this._registrations.clear();
    }
    getProviders() {
      const result = [];
      for (const registration of this._registrations.values()) {
        result.push(registration.provider);
      }
      return result;
    }
  }
  exports2.WorkspaceFeature = WorkspaceFeature;
  var DiagnosticCollectionSource;
  (function(DiagnosticCollectionSource2) {
    DiagnosticCollectionSource2["push"] = "push";
    DiagnosticCollectionSource2["pull"] = "pull";
  })(DiagnosticCollectionSource || (exports2.DiagnosticCollectionSource = DiagnosticCollectionSource = {}));

  class DefaultDiagnosticCollectionProvider {
    create(name, _source) {
      return name !== undefined ? vscode_1.languages.createDiagnosticCollection(name) : vscode_1.languages.createDiagnosticCollection();
    }
    dispose(collection, _source) {
      collection.dispose();
    }
  }
  exports2.DefaultDiagnosticCollectionProvider = DefaultDiagnosticCollectionProvider;
});

// editors/vscode/node_modules/balanced-match/dist/commonjs/index.js
var require_commonjs = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.range = exports2.balanced = undefined;
  var balanced = (a, b, str) => {
    const ma = a instanceof RegExp ? maybeMatch(a, str) : a;
    const mb = b instanceof RegExp ? maybeMatch(b, str) : b;
    const r = ma !== null && mb != null && (0, exports2.range)(ma, mb, str);
    return r && {
      start: r[0],
      end: r[1],
      pre: str.slice(0, r[0]),
      body: str.slice(r[0] + ma.length, r[1]),
      post: str.slice(r[1] + mb.length)
    };
  };
  exports2.balanced = balanced;
  var maybeMatch = (reg, str) => {
    const m = str.match(reg);
    return m ? m[0] : null;
  };
  var range = (a, b, str) => {
    let begs, beg, left, right = undefined, result;
    let ai = str.indexOf(a);
    let bi = str.indexOf(b, ai + 1);
    let i = ai;
    if (ai >= 0 && bi > 0) {
      if (a === b) {
        return [ai, bi];
      }
      begs = [];
      left = str.length;
      while (i >= 0 && !result) {
        if (i === ai) {
          begs.push(i);
          ai = str.indexOf(a, i + 1);
        } else if (begs.length === 1) {
          const r = begs.pop();
          if (r !== undefined)
            result = [r, bi];
        } else {
          beg = begs.pop();
          if (beg !== undefined && beg < left) {
            left = beg;
            right = bi;
          }
          bi = str.indexOf(b, i + 1);
        }
        i = ai < bi && ai >= 0 ? ai : bi;
      }
      if (begs.length && right !== undefined) {
        result = [left, right];
      }
    }
    return result;
  };
  exports2.range = range;
});

// editors/vscode/node_modules/brace-expansion/dist/commonjs/index.js
var require_commonjs2 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.EXPANSION_MAX_LENGTH = exports2.EXPANSION_MAX = undefined;
  exports2.expand = expand;
  var balanced_match_1 = require_commonjs();
  var escSlash = "\x00SLASH" + Math.random() + "\x00";
  var escOpen = "\x00OPEN" + Math.random() + "\x00";
  var escClose = "\x00CLOSE" + Math.random() + "\x00";
  var escComma = "\x00COMMA" + Math.random() + "\x00";
  var escPeriod = "\x00PERIOD" + Math.random() + "\x00";
  var escSlashPattern = new RegExp(escSlash, "g");
  var escOpenPattern = new RegExp(escOpen, "g");
  var escClosePattern = new RegExp(escClose, "g");
  var escCommaPattern = new RegExp(escComma, "g");
  var escPeriodPattern = new RegExp(escPeriod, "g");
  var slashPattern = /\\\\/g;
  var openPattern = /\\{/g;
  var closePattern = /\\}/g;
  var commaPattern = /\\,/g;
  var periodPattern = /\\\./g;
  exports2.EXPANSION_MAX = 1e5;
  exports2.EXPANSION_MAX_LENGTH = 4000000;
  function numeric(str) {
    return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);
  }
  function escapeBraces(str) {
    return str.replace(slashPattern, escSlash).replace(openPattern, escOpen).replace(closePattern, escClose).replace(commaPattern, escComma).replace(periodPattern, escPeriod);
  }
  function unescapeBraces(str) {
    return str.replace(escSlashPattern, "\\").replace(escOpenPattern, "{").replace(escClosePattern, "}").replace(escCommaPattern, ",").replace(escPeriodPattern, ".");
  }
  function parseCommaParts(str) {
    if (!str) {
      return [""];
    }
    const parts = [];
    const m = (0, balanced_match_1.balanced)("{", "}", str);
    if (!m) {
      return str.split(",");
    }
    const { pre, body, post } = m;
    const p = pre.split(",");
    p[p.length - 1] += "{" + body + "}";
    const postParts = parseCommaParts(post);
    if (post.length) {
      p[p.length - 1] += postParts.shift();
      p.push.apply(p, postParts);
    }
    parts.push.apply(parts, p);
    return parts;
  }
  function expand(str, options = {}) {
    if (!str) {
      return [];
    }
    const { max = exports2.EXPANSION_MAX, maxLength = exports2.EXPANSION_MAX_LENGTH } = options;
    if (str.slice(0, 2) === "{}") {
      str = "\\{\\}" + str.slice(2);
    }
    return expand_(escapeBraces(str), max, maxLength, true).map(unescapeBraces);
  }
  function embrace(str) {
    return "{" + str + "}";
  }
  function isPadded(el) {
    return /^-?0\d/.test(el);
  }
  function lte(i, y) {
    return i <= y;
  }
  function gte(i, y) {
    return i >= y;
  }
  function combine(acc, pre, values, max, maxLength, dropEmpties) {
    const out = [];
    let length = 0;
    for (let a = 0;a < acc.length; a++) {
      for (let v = 0;v < values.length; v++) {
        if (out.length >= max)
          return out;
        const expansion = acc[a] + pre + values[v];
        if (dropEmpties && !expansion)
          continue;
        if (length + expansion.length > maxLength)
          return out;
        out.push(expansion);
        length += expansion.length;
      }
    }
    return out;
  }
  function expandSequence(body, isAlphaSequence, max, maxLength) {
    const n = body.split(/\.\./);
    const N = [];
    if (n[0] === undefined || n[1] === undefined) {
      return N;
    }
    const x = numeric(n[0]);
    const y = numeric(n[1]);
    const width = Math.max(n[0].length, n[1].length);
    let incr = n.length === 3 && n[2] !== undefined ? Math.max(Math.abs(numeric(n[2])), 1) : 1;
    let test = lte;
    const reverse = y < x;
    if (reverse) {
      incr *= -1;
      test = gte;
    }
    const pad = n.some(isPadded);
    let length = 0;
    for (let i = x;test(i, y) && N.length < max; i += incr) {
      let c;
      if (isAlphaSequence) {
        c = String.fromCharCode(i);
        if (c === "\\") {
          c = "";
        }
      } else {
        c = String(i);
        if (pad) {
          const need = width - c.length;
          if (need > 0) {
            const z = new Array(need + 1).join("0");
            if (i < 0) {
              c = "-" + z + c.slice(1);
            } else {
              c = z + c;
            }
          }
        }
      }
      if (length + c.length > maxLength)
        break;
      N.push(c);
      length += c.length;
    }
    return N;
  }
  function expand_(str, max, maxLength, isTop) {
    let acc = [""];
    let dropEmpties = false;
    let firstGroup = true;
    for (;; ) {
      const m = (0, balanced_match_1.balanced)("{", "}", str);
      if (!m) {
        return combine(acc, str, [""], max, maxLength, dropEmpties);
      }
      const pre = m.pre;
      if (/\$$/.test(pre)) {
        acc = combine(acc, pre + "{" + m.body + "}", [""], max, maxLength, dropEmpties && !m.post.length);
        firstGroup = false;
        if (!m.post.length)
          break;
        str = m.post;
        continue;
      }
      const isNumericSequence = /^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(m.body);
      const isAlphaSequence = /^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(m.body);
      const isSequence = isNumericSequence || isAlphaSequence;
      const isOptions = m.body.indexOf(",") >= 0;
      if (!isSequence && !isOptions) {
        if (m.post.match(/,(?!,).*\}/)) {
          str = m.pre + "{" + m.body + escClose + m.post;
          isTop = true;
          continue;
        }
        return combine(acc, pre + "{" + m.body + "}" + m.post, [""], max, maxLength, dropEmpties);
      }
      if (firstGroup) {
        dropEmpties = isTop && !isSequence;
        firstGroup = false;
      }
      let values;
      if (isSequence) {
        values = expandSequence(m.body, isAlphaSequence, max, maxLength);
      } else {
        let n = parseCommaParts(m.body);
        if (n.length === 1 && n[0] !== undefined) {
          n = expand_(n[0], max, maxLength, false).map(embrace);
          if (n.length === 1) {
            acc = combine(acc, pre + n[0], [""], max, maxLength, dropEmpties && !m.post.length);
            if (!m.post.length)
              break;
            str = m.post;
            continue;
          }
        }
        let dropsEmpties = dropEmpties && !m.post.length && !pre;
        for (let d = 0;dropsEmpties && d < acc.length; d++) {
          if (acc[d]) {
            dropsEmpties = false;
          }
        }
        values = [];
        let valuesLength = 0;
        outer:
          for (let j = 0;j < n.length; j++) {
            const expanded = expand_(n[j], max, maxLength, false);
            for (let k = 0;k < expanded.length; k++) {
              const v = expanded[k];
              if (dropsEmpties && !v)
                continue;
              if (values.length >= max || valuesLength + v.length > maxLength) {
                break outer;
              }
              values.push(v);
              valuesLength += v.length;
            }
          }
      }
      acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);
      if (!m.post.length)
        break;
      str = m.post;
    }
    return acc;
  }
});

// editors/vscode/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js
var require_assert_valid_pattern = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.assertValidPattern = undefined;
  var MAX_PATTERN_LENGTH = 1024 * 64;
  var assertValidPattern = (pattern) => {
    if (typeof pattern !== "string") {
      throw new TypeError("invalid pattern");
    }
    if (pattern.length > MAX_PATTERN_LENGTH) {
      throw new TypeError("pattern is too long");
    }
  };
  exports2.assertValidPattern = assertValidPattern;
});

// editors/vscode/node_modules/minimatch/dist/commonjs/brace-expressions.js
var require_brace_expressions = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.parseClass = undefined;
  var posixClasses = {
    "[:alnum:]": ["\\p{L}\\p{Nl}\\p{Nd}", true],
    "[:alpha:]": ["\\p{L}\\p{Nl}", true],
    "[:ascii:]": ["\\x" + "00-\\x" + "7f", false],
    "[:blank:]": ["\\p{Zs}\\t", true],
    "[:cntrl:]": ["\\p{Cc}", true],
    "[:digit:]": ["\\p{Nd}", true],
    "[:graph:]": ["\\p{Z}\\p{C}", true, true],
    "[:lower:]": ["\\p{Ll}", true],
    "[:print:]": ["\\p{C}", true],
    "[:punct:]": ["\\p{P}", true],
    "[:space:]": ["\\p{Z}\\t\\r\\n\\v\\f", true],
    "[:upper:]": ["\\p{Lu}", true],
    "[:word:]": ["\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}", true],
    "[:xdigit:]": ["A-Fa-f0-9", false]
  };
  var braceEscape = (s) => s.replace(/[[\]\\-]/g, "\\$&");
  var regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  var rangesToString = (ranges) => ranges.join("");
  var parseClass = (glob, position) => {
    const pos = position;
    if (glob.charAt(pos) !== "[") {
      throw new Error("not in a brace expression");
    }
    const ranges = [];
    const negs = [];
    let i = pos + 1;
    let sawStart = false;
    let uflag = false;
    let escaping = false;
    let negate = false;
    let endPos = pos;
    let rangeStart = "";
    WHILE:
      while (i < glob.length) {
        const c = glob.charAt(i);
        if ((c === "!" || c === "^") && i === pos + 1) {
          negate = true;
          i++;
          continue;
        }
        if (c === "]" && sawStart && !escaping) {
          endPos = i + 1;
          break;
        }
        sawStart = true;
        if (c === "\\") {
          if (!escaping) {
            escaping = true;
            i++;
            continue;
          }
        }
        if (c === "[" && !escaping) {
          for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
            if (glob.startsWith(cls, i)) {
              if (rangeStart) {
                return ["$.", false, glob.length - pos, true];
              }
              i += cls.length;
              if (neg)
                negs.push(unip);
              else
                ranges.push(unip);
              uflag = uflag || u;
              continue WHILE;
            }
          }
        }
        escaping = false;
        if (rangeStart) {
          if (c > rangeStart) {
            ranges.push(braceEscape(rangeStart) + "-" + braceEscape(c));
          } else if (c === rangeStart) {
            ranges.push(braceEscape(c));
          }
          rangeStart = "";
          i++;
          continue;
        }
        if (glob.startsWith("-]", i + 1)) {
          ranges.push(braceEscape(c + "-"));
          i += 2;
          continue;
        }
        if (glob.startsWith("-", i + 1)) {
          rangeStart = c;
          i += 2;
          continue;
        }
        ranges.push(braceEscape(c));
        i++;
      }
    if (endPos < i) {
      return ["", false, 0, false];
    }
    if (!ranges.length && !negs.length) {
      return ["$.", false, glob.length - pos, true];
    }
    if (negs.length === 0 && ranges.length === 1 && /^\\?.$/.test(ranges[0]) && !negate) {
      const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
      return [regexpEscape(r), false, endPos - pos, false];
    }
    const sranges = "[" + (negate ? "^" : "") + rangesToString(ranges) + "]";
    const snegs = "[" + (negate ? "" : "^") + rangesToString(negs) + "]";
    const comb = ranges.length && negs.length ? "(" + sranges + "|" + snegs + ")" : ranges.length ? sranges : snegs;
    return [comb, uflag, endPos - pos, true];
  };
  exports2.parseClass = parseClass;
});

// editors/vscode/node_modules/minimatch/dist/commonjs/unescape.js
var require_unescape = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.unescape = undefined;
  var unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true } = {}) => {
    if (magicalBraces) {
      return windowsPathsNoEscape ? s.replace(/\[([^/\\])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\])\]/g, "$1$2").replace(/\\([^/])/g, "$1");
    }
    return windowsPathsNoEscape ? s.replace(/\[([^/\\{}])\]/g, "$1") : s.replace(/((?!\\).|^)\[([^/\\{}])\]/g, "$1$2").replace(/\\([^/{}])/g, "$1");
  };
  exports2.unescape = unescape;
});

// editors/vscode/node_modules/minimatch/dist/commonjs/ast.js
var require_ast = __commonJS((exports2) => {
  var _a;
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.AST = undefined;
  var brace_expressions_js_1 = require_brace_expressions();
  var unescape_js_1 = require_unescape();
  var types = new Set(["!", "?", "+", "*", "@"]);
  var isExtglobType = (c) => types.has(c);
  var isExtglobAST = (c) => isExtglobType(c.type);
  var adoptionMap = new Map([
    ["!", ["@"]],
    ["?", ["?", "@"]],
    ["@", ["@"]],
    ["*", ["*", "+", "?", "@"]],
    ["+", ["+", "@"]]
  ]);
  var adoptionWithSpaceMap = new Map([
    ["!", ["?"]],
    ["@", ["?"]],
    ["+", ["?", "*"]]
  ]);
  var adoptionAnyMap = new Map([
    ["!", ["?", "@"]],
    ["?", ["?", "@"]],
    ["@", ["?", "@"]],
    ["*", ["*", "+", "?", "@"]],
    ["+", ["+", "@", "?", "*"]]
  ]);
  var usurpMap = new Map([
    ["!", new Map([["!", "@"]])],
    [
      "?",
      new Map([
        ["*", "*"],
        ["+", "*"]
      ])
    ],
    [
      "@",
      new Map([
        ["!", "!"],
        ["?", "?"],
        ["@", "@"],
        ["*", "*"],
        ["+", "+"]
      ])
    ],
    [
      "+",
      new Map([
        ["?", "*"],
        ["*", "*"]
      ])
    ]
  ]);
  var startNoTraversal = "(?!(?:^|/)\\.\\.?(?:$|/))";
  var startNoDot = "(?!\\.)";
  var addPatternStart = new Set(["[", "."]);
  var justDots = new Set(["..", "."]);
  var reSpecials = new Set("().*{}+?[]^$\\!");
  var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
  var qmark = "[^/]";
  var star = qmark + "*?";
  var starNoEmpty = qmark + "+?";
  var ID = 0;

  class AST {
    type;
    #root;
    #hasMagic;
    #uflag = false;
    #parts = [];
    #parent;
    #parentIndex;
    #negs;
    #filledNegs = false;
    #options;
    #toString;
    #emptyExt = false;
    id = ++ID;
    get depth() {
      return (this.#parent?.depth ?? -1) + 1;
    }
    [Symbol.for("nodejs.util.inspect.custom")]() {
      return {
        "@@type": "AST",
        id: this.id,
        type: this.type,
        root: this.#root.id,
        parent: this.#parent?.id,
        depth: this.depth,
        partsLength: this.#parts.length,
        parts: this.#parts
      };
    }
    constructor(type, parent, options = {}) {
      this.type = type;
      if (type)
        this.#hasMagic = true;
      this.#parent = parent;
      this.#root = this.#parent ? this.#parent.#root : this;
      this.#options = this.#root === this ? options : this.#root.#options;
      this.#negs = this.#root === this ? [] : this.#root.#negs;
      if (type === "!" && !this.#root.#filledNegs)
        this.#negs.push(this);
      this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
    }
    get hasMagic() {
      if (this.#hasMagic !== undefined)
        return this.#hasMagic;
      for (const p of this.#parts) {
        if (typeof p === "string")
          continue;
        if (p.type || p.hasMagic)
          return this.#hasMagic = true;
      }
      return this.#hasMagic;
    }
    toString() {
      return this.#toString !== undefined ? this.#toString : !this.type ? this.#toString = this.#parts.map((p) => String(p)).join("") : this.#toString = this.type + "(" + this.#parts.map((p) => String(p)).join("|") + ")";
    }
    #fillNegs() {
      if (this !== this.#root)
        throw new Error("should only call on root");
      if (this.#filledNegs)
        return this;
      this.toString();
      this.#filledNegs = true;
      let n;
      while (n = this.#negs.pop()) {
        if (n.type !== "!")
          continue;
        let p = n;
        let pp = p.#parent;
        while (pp) {
          for (let i = p.#parentIndex + 1;!pp.type && i < pp.#parts.length; i++) {
            for (const part of n.#parts) {
              if (typeof part === "string") {
                throw new Error("string part in extglob AST??");
              }
              part.copyIn(pp.#parts[i]);
            }
          }
          p = pp;
          pp = p.#parent;
        }
      }
      return this;
    }
    push(...parts) {
      for (const p of parts) {
        if (p === "")
          continue;
        if (typeof p !== "string" && !(p instanceof _a && p.#parent === this)) {
          throw new Error("invalid part: " + p);
        }
        this.#parts.push(p);
      }
    }
    toJSON() {
      const ret = this.type === null ? this.#parts.slice().map((p) => typeof p === "string" ? p : p.toJSON()) : [this.type, ...this.#parts.map((p) => p.toJSON())];
      if (this.isStart() && !this.type)
        ret.unshift([]);
      if (this.isEnd() && (this === this.#root || this.#root.#filledNegs && this.#parent?.type === "!")) {
        ret.push({});
      }
      return ret;
    }
    isStart() {
      if (this.#root === this)
        return true;
      if (!this.#parent?.isStart())
        return false;
      if (this.#parentIndex === 0)
        return true;
      const p = this.#parent;
      for (let i = 0;i < this.#parentIndex; i++) {
        const pp = p.#parts[i];
        if (!(pp instanceof _a && pp.type === "!")) {
          return false;
        }
      }
      return true;
    }
    isEnd() {
      if (this.#root === this)
        return true;
      if (this.#parent?.type === "!")
        return true;
      if (!this.#parent?.isEnd())
        return false;
      if (!this.type)
        return this.#parent?.isEnd();
      const pl = this.#parent ? this.#parent.#parts.length : 0;
      return this.#parentIndex === pl - 1;
    }
    copyIn(part) {
      if (typeof part === "string")
        this.push(part);
      else
        this.push(part.clone(this));
    }
    clone(parent) {
      const c = new _a(this.type, parent);
      for (const p of this.#parts) {
        c.copyIn(p);
      }
      return c;
    }
    static #parseAST(str, ast, pos, opt, extDepth) {
      const maxDepth = opt.maxExtglobRecursion ?? 2;
      let escaping = false;
      let inBrace = false;
      let braceStart = -1;
      let braceNeg = false;
      if (ast.type === null) {
        let i2 = pos;
        let acc2 = "";
        while (i2 < str.length) {
          const c = str.charAt(i2++);
          if (escaping || c === "\\") {
            escaping = !escaping;
            acc2 += c;
            continue;
          }
          if (inBrace) {
            if (i2 === braceStart + 1) {
              if (c === "^" || c === "!") {
                braceNeg = true;
              }
            } else if (c === "]" && !(i2 === braceStart + 2 && braceNeg)) {
              inBrace = false;
            }
            acc2 += c;
            continue;
          } else if (c === "[") {
            inBrace = true;
            braceStart = i2;
            braceNeg = false;
            acc2 += c;
            continue;
          }
          const doRecurse = !opt.noext && isExtglobType(c) && str.charAt(i2) === "(" && extDepth <= maxDepth;
          if (doRecurse) {
            ast.push(acc2);
            acc2 = "";
            const ext = new _a(c, ast);
            i2 = _a.#parseAST(str, ext, i2, opt, extDepth + 1);
            ast.push(ext);
            continue;
          }
          acc2 += c;
        }
        ast.push(acc2);
        return i2;
      }
      let i = pos + 1;
      let part = new _a(null, ast);
      const parts = [];
      let acc = "";
      while (i < str.length) {
        const c = str.charAt(i++);
        if (escaping || c === "\\") {
          escaping = !escaping;
          acc += c;
          continue;
        }
        if (inBrace) {
          if (i === braceStart + 1) {
            if (c === "^" || c === "!") {
              braceNeg = true;
            }
          } else if (c === "]" && !(i === braceStart + 2 && braceNeg)) {
            inBrace = false;
          }
          acc += c;
          continue;
        } else if (c === "[") {
          inBrace = true;
          braceStart = i;
          braceNeg = false;
          acc += c;
          continue;
        }
        const doRecurse = !opt.noext && isExtglobType(c) && str.charAt(i) === "(" && (extDepth <= maxDepth || ast && ast.#canAdoptType(c));
        if (doRecurse) {
          const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;
          part.push(acc);
          acc = "";
          const ext = new _a(c, part);
          part.push(ext);
          i = _a.#parseAST(str, ext, i, opt, extDepth + depthAdd);
          continue;
        }
        if (c === "|") {
          part.push(acc);
          acc = "";
          parts.push(part);
          part = new _a(null, ast);
          continue;
        }
        if (c === ")") {
          if (acc === "" && ast.#parts.length === 0) {
            ast.#emptyExt = true;
          }
          part.push(acc);
          acc = "";
          ast.push(...parts, part);
          return i;
        }
        acc += c;
      }
      ast.type = null;
      ast.#hasMagic = undefined;
      ast.#parts = [str.substring(pos - 1)];
      return i;
    }
    #canAdoptWithSpace(child) {
      return this.#canAdopt(child, adoptionWithSpaceMap);
    }
    #canAdopt(child, map = adoptionMap) {
      if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null) {
        return false;
      }
      const gc = child.#parts[0];
      if (!gc || typeof gc !== "object" || gc.type === null) {
        return false;
      }
      return this.#canAdoptType(gc.type, map);
    }
    #canAdoptType(c, map = adoptionAnyMap) {
      return !!map.get(this.type)?.includes(c);
    }
    #adoptWithSpace(child, index) {
      const gc = child.#parts[0];
      const blank = new _a(null, gc, this.options);
      blank.#parts.push("");
      gc.push(blank);
      this.#adopt(child, index);
    }
    #adopt(child, index) {
      const gc = child.#parts[0];
      this.#parts.splice(index, 1, ...gc.#parts);
      for (const p of gc.#parts) {
        if (typeof p === "object")
          p.#parent = this;
      }
      this.#toString = undefined;
    }
    #canUsurpType(c) {
      const m = usurpMap.get(this.type);
      return !!m?.has(c);
    }
    #canUsurp(child) {
      if (!child || typeof child !== "object" || child.type !== null || child.#parts.length !== 1 || this.type === null || this.#parts.length !== 1) {
        return false;
      }
      const gc = child.#parts[0];
      if (!gc || typeof gc !== "object" || gc.type === null) {
        return false;
      }
      return this.#canUsurpType(gc.type);
    }
    #usurp(child) {
      const m = usurpMap.get(this.type);
      const gc = child.#parts[0];
      const nt = m?.get(gc.type);
      if (!nt)
        return false;
      this.#parts = gc.#parts;
      for (const p of this.#parts) {
        if (typeof p === "object") {
          p.#parent = this;
        }
      }
      this.type = nt;
      this.#toString = undefined;
      this.#emptyExt = false;
    }
    static fromGlob(pattern, options = {}) {
      const ast = new _a(null, undefined, options);
      _a.#parseAST(pattern, ast, 0, options, 0);
      return ast;
    }
    toMMPattern() {
      if (this !== this.#root)
        return this.#root.toMMPattern();
      const glob = this.toString();
      const [re, body, hasMagic, uflag] = this.toRegExpSource();
      const anyMagic = hasMagic || this.#hasMagic || this.#options.nocase && !this.#options.nocaseMagicOnly && glob.toUpperCase() !== glob.toLowerCase();
      if (!anyMagic) {
        return body;
      }
      const flags = (this.#options.nocase ? "i" : "") + (uflag ? "u" : "");
      return Object.assign(new RegExp(`^${re}$`, flags), {
        _src: re,
        _glob: glob
      });
    }
    get options() {
      return this.#options;
    }
    toRegExpSource(allowDot) {
      const dot = allowDot ?? !!this.#options.dot;
      if (this.#root === this) {
        this.#flatten();
        this.#fillNegs();
      }
      if (!isExtglobAST(this)) {
        const noEmpty = this.isStart() && this.isEnd() && !this.#parts.some((s) => typeof s !== "string");
        const src = this.#parts.map((p) => {
          const [re, _, hasMagic, uflag] = typeof p === "string" ? _a.#parseGlob(p, this.#hasMagic, noEmpty) : p.toRegExpSource(allowDot);
          this.#hasMagic = this.#hasMagic || hasMagic;
          this.#uflag = this.#uflag || uflag;
          return re;
        }).join("");
        let start2 = "";
        if (this.isStart()) {
          if (typeof this.#parts[0] === "string") {
            const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
            if (!dotTravAllowed) {
              const aps = addPatternStart;
              const needNoTrav = dot && aps.has(src.charAt(0)) || src.startsWith("\\.") && aps.has(src.charAt(2)) || src.startsWith("\\.\\.") && aps.has(src.charAt(4));
              const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
              start2 = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : "";
            }
          }
        }
        let end = "";
        if (this.isEnd() && this.#root.#filledNegs && this.#parent?.type === "!") {
          end = "(?:$|\\/)";
        }
        const final2 = start2 + src + end;
        return [
          final2,
          (0, unescape_js_1.unescape)(src),
          this.#hasMagic = !!this.#hasMagic,
          this.#uflag
        ];
      }
      const repeated = this.type === "*" || this.type === "+";
      const start = this.type === "!" ? "(?:(?!(?:" : "(?:";
      let body = this.#partsToRegExp(dot);
      if (this.isStart() && this.isEnd() && !body && this.type !== "!") {
        const s = this.toString();
        const me = this;
        me.#parts = [s];
        me.type = null;
        me.#hasMagic = undefined;
        return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
      }
      let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ? "" : this.#partsToRegExp(true);
      if (bodyDotAllowed === body) {
        bodyDotAllowed = "";
      }
      if (bodyDotAllowed) {
        body = `(?:${body})(?:${bodyDotAllowed})*?`;
      }
      let final = "";
      if (this.type === "!" && this.#emptyExt) {
        final = (this.isStart() && !dot ? startNoDot : "") + starNoEmpty;
      } else {
        const close = this.type === "!" ? "))" + (this.isStart() && !dot && !allowDot ? startNoDot : "") + star + ")" : this.type === "@" ? ")" : this.type === "?" ? ")?" : this.type === "+" && bodyDotAllowed ? ")" : this.type === "*" && bodyDotAllowed ? `)?` : `)${this.type}`;
        final = start + body + close;
      }
      return [
        final,
        (0, unescape_js_1.unescape)(body),
        this.#hasMagic = !!this.#hasMagic,
        this.#uflag
      ];
    }
    #flatten() {
      if (!isExtglobAST(this)) {
        for (const p of this.#parts) {
          if (typeof p === "object") {
            p.#flatten();
          }
        }
      } else {
        let iterations = 0;
        let done = false;
        do {
          done = true;
          for (let i = 0;i < this.#parts.length; i++) {
            const c = this.#parts[i];
            if (typeof c === "object") {
              c.#flatten();
              if (this.#canAdopt(c)) {
                done = false;
                this.#adopt(c, i);
              } else if (this.#canAdoptWithSpace(c)) {
                done = false;
                this.#adoptWithSpace(c, i);
              } else if (this.#canUsurp(c)) {
                done = false;
                this.#usurp(c);
              }
            }
          }
        } while (!done && ++iterations < 10);
      }
      this.#toString = undefined;
    }
    #partsToRegExp(dot) {
      return this.#parts.map((p) => {
        if (typeof p === "string") {
          throw new Error("string type in extglob ast??");
        }
        const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
        this.#uflag = this.#uflag || uflag;
        return re;
      }).filter((p) => !(this.isStart() && this.isEnd()) || !!p).join("|");
    }
    static #parseGlob(glob, hasMagic, noEmpty = false) {
      let escaping = false;
      let re = "";
      let uflag = false;
      let inStar = false;
      for (let i = 0;i < glob.length; i++) {
        const c = glob.charAt(i);
        if (escaping) {
          escaping = false;
          re += (reSpecials.has(c) ? "\\" : "") + c;
          continue;
        }
        if (c === "*") {
          if (inStar)
            continue;
          inStar = true;
          re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;
          hasMagic = true;
          continue;
        } else {
          inStar = false;
        }
        if (c === "\\") {
          if (i === glob.length - 1) {
            re += "\\\\";
          } else {
            escaping = true;
          }
          continue;
        }
        if (c === "[") {
          const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
          if (consumed) {
            re += src;
            uflag = uflag || needUflag;
            i += consumed - 1;
            hasMagic = hasMagic || magic;
            continue;
          }
        }
        if (c === "?") {
          re += qmark;
          hasMagic = true;
          continue;
        }
        re += regExpEscape(c);
      }
      return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag];
    }
  }
  exports2.AST = AST;
  _a = AST;
});

// editors/vscode/node_modules/minimatch/dist/commonjs/escape.js
var require_escape = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.escape = undefined;
  var escape = (s, { windowsPathsNoEscape = false, magicalBraces = false } = {}) => {
    if (magicalBraces) {
      return windowsPathsNoEscape ? s.replace(/[?*()[\]{}]/g, "[$&]") : s.replace(/[?*()[\]\\{}]/g, "\\$&");
    }
    return windowsPathsNoEscape ? s.replace(/[?*()[\]]/g, "[$&]") : s.replace(/[?*()[\]\\]/g, "\\$&");
  };
  exports2.escape = escape;
});

// editors/vscode/node_modules/minimatch/dist/commonjs/index.js
var require_commonjs3 = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.unescape = exports2.escape = exports2.AST = exports2.Minimatch = exports2.match = exports2.makeRe = exports2.braceExpand = exports2.defaults = exports2.filter = exports2.GLOBSTAR = exports2.sep = exports2.minimatch = undefined;
  var brace_expansion_1 = require_commonjs2();
  var assert_valid_pattern_js_1 = require_assert_valid_pattern();
  var ast_js_1 = require_ast();
  var escape_js_1 = require_escape();
  var unescape_js_1 = require_unescape();
  var minimatch = (p, pattern, options = {}) => {
    (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
    if (!options.nocomment && pattern.charAt(0) === "#") {
      return false;
    }
    return new Minimatch(pattern, options).match(p);
  };
  exports2.minimatch = minimatch;
  var starDotExtRE = /^\*+([^+@!?*[(]*)$/;
  var starDotExtTest = (ext2) => (f) => !f.startsWith(".") && f.endsWith(ext2);
  var starDotExtTestDot = (ext2) => (f) => f.endsWith(ext2);
  var starDotExtTestNocase = (ext2) => {
    ext2 = ext2.toLowerCase();
    return (f) => !f.startsWith(".") && f.toLowerCase().endsWith(ext2);
  };
  var starDotExtTestNocaseDot = (ext2) => {
    ext2 = ext2.toLowerCase();
    return (f) => f.toLowerCase().endsWith(ext2);
  };
  var starDotStarRE = /^\*+\.\*+$/;
  var starDotStarTest = (f) => !f.startsWith(".") && f.includes(".");
  var starDotStarTestDot = (f) => f !== "." && f !== ".." && f.includes(".");
  var dotStarRE = /^\.\*+$/;
  var dotStarTest = (f) => f !== "." && f !== ".." && f.startsWith(".");
  var starRE = /^\*+$/;
  var starTest = (f) => f.length !== 0 && !f.startsWith(".");
  var starTestDot = (f) => f.length !== 0 && f !== "." && f !== "..";
  var qmarksRE = /^\?+([^+@!?*[(]*)?$/;
  var qmarksTestNocase = ([$0, ext2 = ""]) => {
    const noext = qmarksTestNoExt([$0]);
    if (!ext2)
      return noext;
    ext2 = ext2.toLowerCase();
    return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
  };
  var qmarksTestNocaseDot = ([$0, ext2 = ""]) => {
    const noext = qmarksTestNoExtDot([$0]);
    if (!ext2)
      return noext;
    ext2 = ext2.toLowerCase();
    return (f) => noext(f) && f.toLowerCase().endsWith(ext2);
  };
  var qmarksTestDot = ([$0, ext2 = ""]) => {
    const noext = qmarksTestNoExtDot([$0]);
    return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
  };
  var qmarksTest = ([$0, ext2 = ""]) => {
    const noext = qmarksTestNoExt([$0]);
    return !ext2 ? noext : (f) => noext(f) && f.endsWith(ext2);
  };
  var qmarksTestNoExt = ([$0]) => {
    const len = $0.length;
    return (f) => f.length === len && !f.startsWith(".");
  };
  var qmarksTestNoExtDot = ([$0]) => {
    const len = $0.length;
    return (f) => f.length === len && f !== "." && f !== "..";
  };
  var defaultPlatform = typeof process === "object" && process ? typeof process.env === "object" && process.env && process.env.__MINIMATCH_TESTING_PLATFORM__ || process.platform : "posix";
  var path = {
    win32: { sep: "\\" },
    posix: { sep: "/" }
  };
  exports2.sep = defaultPlatform === "win32" ? path.win32.sep : path.posix.sep;
  exports2.minimatch.sep = exports2.sep;
  exports2.GLOBSTAR = Symbol("globstar **");
  exports2.minimatch.GLOBSTAR = exports2.GLOBSTAR;
  var qmark = "[^/]";
  var star = qmark + "*?";
  var twoStarDot = "(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?";
  var twoStarNoDot = "(?:(?!(?:\\/|^)\\.).)*?";
  var filter = (pattern, options = {}) => (p) => (0, exports2.minimatch)(p, pattern, options);
  exports2.filter = filter;
  exports2.minimatch.filter = exports2.filter;
  var ext = (a, b = {}) => Object.assign({}, a, b);
  var defaults = (def) => {
    if (!def || typeof def !== "object" || !Object.keys(def).length) {
      return exports2.minimatch;
    }
    const orig = exports2.minimatch;
    const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
    return Object.assign(m, {
      Minimatch: class Minimatch2 extends orig.Minimatch {
        constructor(pattern, options = {}) {
          super(pattern, ext(def, options));
        }
        static defaults(options) {
          return orig.defaults(ext(def, options)).Minimatch;
        }
      },
      AST: class AST extends orig.AST {
        constructor(type, parent, options = {}) {
          super(type, parent, ext(def, options));
        }
        static fromGlob(pattern, options = {}) {
          return orig.AST.fromGlob(pattern, ext(def, options));
        }
      },
      unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
      escape: (s, options = {}) => orig.escape(s, ext(def, options)),
      filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
      defaults: (options) => orig.defaults(ext(def, options)),
      makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
      braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
      match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
      sep: orig.sep,
      GLOBSTAR: exports2.GLOBSTAR
    });
  };
  exports2.defaults = defaults;
  exports2.minimatch.defaults = exports2.defaults;
  var braceExpand = (pattern, options = {}) => {
    (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
    if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
      return [pattern];
    }
    return (0, brace_expansion_1.expand)(pattern, { max: options.braceExpandMax });
  };
  exports2.braceExpand = braceExpand;
  exports2.minimatch.braceExpand = exports2.braceExpand;
  var makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();
  exports2.makeRe = makeRe;
  exports2.minimatch.makeRe = exports2.makeRe;
  var match = (list, pattern, options = {}) => {
    const mm = new Minimatch(pattern, options);
    list = list.filter((f) => mm.match(f));
    if (mm.options.nonull && !list.length) {
      list.push(pattern);
    }
    return list;
  };
  exports2.match = match;
  exports2.minimatch.match = exports2.match;
  var globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
  var regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");

  class Minimatch {
    options;
    set;
    pattern;
    windowsPathsNoEscape;
    nonegate;
    negate;
    comment;
    empty;
    preserveMultipleSlashes;
    partial;
    globSet;
    globParts;
    nocase;
    isWindows;
    platform;
    windowsNoMagicRoot;
    maxGlobstarRecursion;
    regexp;
    constructor(pattern, options = {}) {
      (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
      options = options || {};
      this.options = options;
      this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;
      this.pattern = pattern;
      this.platform = options.platform || defaultPlatform;
      this.isWindows = this.platform === "win32";
      const awe = "allowWindow" + "sEscape";
      this.windowsPathsNoEscape = !!options.windowsPathsNoEscape || options[awe] === false;
      if (this.windowsPathsNoEscape) {
        this.pattern = this.pattern.replace(/\\/g, "/");
      }
      this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
      this.regexp = null;
      this.negate = false;
      this.nonegate = !!options.nonegate;
      this.comment = false;
      this.empty = false;
      this.partial = !!options.partial;
      this.nocase = !!this.options.nocase;
      this.windowsNoMagicRoot = options.windowsNoMagicRoot !== undefined ? options.windowsNoMagicRoot : !!(this.isWindows && this.nocase);
      this.globSet = [];
      this.globParts = [];
      this.set = [];
      this.make();
    }
    hasMagic() {
      if (this.options.magicalBraces && this.set.length > 1) {
        return true;
      }
      for (const pattern of this.set) {
        for (const part of pattern) {
          if (typeof part !== "string")
            return true;
        }
      }
      return false;
    }
    debug(..._) {}
    make() {
      const pattern = this.pattern;
      const options = this.options;
      if (!options.nocomment && pattern.charAt(0) === "#") {
        this.comment = true;
        return;
      }
      if (!pattern) {
        this.empty = true;
        return;
      }
      this.parseNegate();
      this.globSet = [...new Set(this.braceExpand())];
      if (options.debug) {
        this.debug = (...args) => console.error(...args);
      }
      this.debug(this.pattern, this.globSet);
      const rawGlobParts = this.globSet.map((s) => this.slashSplit(s));
      this.globParts = this.preprocess(rawGlobParts);
      this.debug(this.pattern, this.globParts);
      let set = this.globParts.map((s, _, __) => {
        if (this.isWindows && this.windowsNoMagicRoot) {
          const isUNC = s[0] === "" && s[1] === "" && (s[2] === "?" || !globMagic.test(s[2])) && !globMagic.test(s[3]);
          const isDrive = /^[a-z]:/i.test(s[0]);
          if (isUNC) {
            return [
              ...s.slice(0, 4),
              ...s.slice(4).map((ss) => this.parse(ss))
            ];
          } else if (isDrive) {
            return [s[0], ...s.slice(1).map((ss) => this.parse(ss))];
          }
        }
        return s.map((ss) => this.parse(ss));
      });
      this.debug(this.pattern, set);
      this.set = set.filter((s) => s.indexOf(false) === -1);
      if (this.isWindows) {
        for (let i = 0;i < this.set.length; i++) {
          const p = this.set[i];
          if (p[0] === "" && p[1] === "" && this.globParts[i][2] === "?" && typeof p[3] === "string" && /^[a-z]:$/i.test(p[3])) {
            p[2] = "?";
          }
        }
      }
      this.debug(this.pattern, this.set);
    }
    preprocess(globParts) {
      if (this.options.noglobstar) {
        for (const partset of globParts) {
          for (let j = 0;j < partset.length; j++) {
            if (partset[j] === "**") {
              partset[j] = "*";
            }
          }
        }
      }
      const { optimizationLevel = 1 } = this.options;
      if (optimizationLevel >= 2) {
        globParts = this.firstPhasePreProcess(globParts);
        globParts = this.secondPhasePreProcess(globParts);
      } else if (optimizationLevel >= 1) {
        globParts = this.levelOneOptimize(globParts);
      } else {
        globParts = this.adjascentGlobstarOptimize(globParts);
      }
      return globParts;
    }
    adjascentGlobstarOptimize(globParts) {
      return globParts.map((parts) => {
        let gs = -1;
        while ((gs = parts.indexOf("**", gs + 1)) !== -1) {
          let i = gs;
          while (parts[i + 1] === "**") {
            i++;
          }
          if (i !== gs) {
            parts.splice(gs, i - gs);
          }
        }
        return parts;
      });
    }
    levelOneOptimize(globParts) {
      return globParts.map((parts) => {
        parts = parts.reduce((set, part) => {
          const prev = set[set.length - 1];
          if (part === "**" && prev === "**") {
            return set;
          }
          if (part === "..") {
            if (prev && prev !== ".." && prev !== "." && prev !== "**") {
              set.pop();
              return set;
            }
          }
          set.push(part);
          return set;
        }, []);
        return parts.length === 0 ? [""] : parts;
      });
    }
    levelTwoFileOptimize(parts) {
      if (!Array.isArray(parts)) {
        parts = this.slashSplit(parts);
      }
      let didSomething = false;
      do {
        didSomething = false;
        if (!this.preserveMultipleSlashes) {
          for (let i = 1;i < parts.length - 1; i++) {
            const p = parts[i];
            if (i === 1 && p === "" && parts[0] === "")
              continue;
            if (p === "." || p === "") {
              didSomething = true;
              parts.splice(i, 1);
              i--;
            }
          }
          if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
            didSomething = true;
            parts.pop();
          }
        }
        let dd = 0;
        while ((dd = parts.indexOf("..", dd + 1)) !== -1) {
          const p = parts[dd - 1];
          if (p && p !== "." && p !== ".." && p !== "**" && !(this.isWindows && /^[a-z]:$/i.test(p))) {
            didSomething = true;
            parts.splice(dd - 1, 2);
            dd -= 2;
          }
        }
      } while (didSomething);
      return parts.length === 0 ? [""] : parts;
    }
    firstPhasePreProcess(globParts) {
      let didSomething = false;
      do {
        didSomething = false;
        for (let parts of globParts) {
          let gs = -1;
          while ((gs = parts.indexOf("**", gs + 1)) !== -1) {
            let gss = gs;
            while (parts[gss + 1] === "**") {
              gss++;
            }
            if (gss > gs) {
              parts.splice(gs + 1, gss - gs);
            }
            let next = parts[gs + 1];
            const p = parts[gs + 2];
            const p2 = parts[gs + 3];
            if (next !== "..")
              continue;
            if (!p || p === "." || p === ".." || !p2 || p2 === "." || p2 === "..") {
              continue;
            }
            didSomething = true;
            parts.splice(gs, 1);
            const other = parts.slice(0);
            other[gs] = "**";
            globParts.push(other);
            gs--;
          }
          if (!this.preserveMultipleSlashes) {
            for (let i = 1;i < parts.length - 1; i++) {
              const p = parts[i];
              if (i === 1 && p === "" && parts[0] === "")
                continue;
              if (p === "." || p === "") {
                didSomething = true;
                parts.splice(i, 1);
                i--;
              }
            }
            if (parts[0] === "." && parts.length === 2 && (parts[1] === "." || parts[1] === "")) {
              didSomething = true;
              parts.pop();
            }
          }
          let dd = 0;
          while ((dd = parts.indexOf("..", dd + 1)) !== -1) {
            const p = parts[dd - 1];
            if (p && p !== "." && p !== ".." && p !== "**") {
              didSomething = true;
              const needDot = dd === 1 && parts[dd + 1] === "**";
              const splin = needDot ? ["."] : [];
              parts.splice(dd - 1, 2, ...splin);
              if (parts.length === 0)
                parts.push("");
              dd -= 2;
            }
          }
        }
      } while (didSomething);
      return globParts;
    }
    secondPhasePreProcess(globParts) {
      for (let i = 0;i < globParts.length - 1; i++) {
        for (let j = i + 1;j < globParts.length; j++) {
          const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
          if (matched) {
            globParts[i] = [];
            globParts[j] = matched;
            break;
          }
        }
      }
      return globParts.filter((gs) => gs.length);
    }
    partsMatch(a, b, emptyGSMatch = false) {
      let ai = 0;
      let bi = 0;
      let result = [];
      let which = "";
      while (ai < a.length && bi < b.length) {
        if (a[ai] === b[bi]) {
          result.push(which === "b" ? b[bi] : a[ai]);
          ai++;
          bi++;
        } else if (emptyGSMatch && a[ai] === "**" && b[bi] === a[ai + 1]) {
          result.push(a[ai]);
          ai++;
        } else if (emptyGSMatch && b[bi] === "**" && a[ai] === b[bi + 1]) {
          result.push(b[bi]);
          bi++;
        } else if (a[ai] === "*" && b[bi] && (this.options.dot || !b[bi].startsWith(".")) && b[bi] !== "**") {
          if (which === "b")
            return false;
          which = "a";
          result.push(a[ai]);
          ai++;
          bi++;
        } else if (b[bi] === "*" && a[ai] && (this.options.dot || !a[ai].startsWith(".")) && a[ai] !== "**") {
          if (which === "a")
            return false;
          which = "b";
          result.push(b[bi]);
          ai++;
          bi++;
        } else {
          return false;
        }
      }
      return a.length === b.length && result;
    }
    parseNegate() {
      if (this.nonegate)
        return;
      const pattern = this.pattern;
      let negate = false;
      let negateOffset = 0;
      for (let i = 0;i < pattern.length && pattern.charAt(i) === "!"; i++) {
        negate = !negate;
        negateOffset++;
      }
      if (negateOffset)
        this.pattern = pattern.slice(negateOffset);
      this.negate = negate;
    }
    matchOne(file, pattern, partial = false) {
      let fileStartIndex = 0;
      let patternStartIndex = 0;
      if (this.isWindows) {
        const fileDrive = typeof file[0] === "string" && /^[a-z]:$/i.test(file[0]);
        const fileUNC = !fileDrive && file[0] === "" && file[1] === "" && file[2] === "?" && /^[a-z]:$/i.test(file[3]);
        const patternDrive = typeof pattern[0] === "string" && /^[a-z]:$/i.test(pattern[0]);
        const patternUNC = !patternDrive && pattern[0] === "" && pattern[1] === "" && pattern[2] === "?" && typeof pattern[3] === "string" && /^[a-z]:$/i.test(pattern[3]);
        const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;
        const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;
        if (typeof fdi === "number" && typeof pdi === "number") {
          const [fd, pd] = [
            file[fdi],
            pattern[pdi]
          ];
          if (fd.toLowerCase() === pd.toLowerCase()) {
            pattern[pdi] = fd;
            patternStartIndex = pdi;
            fileStartIndex = fdi;
          }
        }
      }
      const { optimizationLevel = 1 } = this.options;
      if (optimizationLevel >= 2) {
        file = this.levelTwoFileOptimize(file);
      }
      if (pattern.includes(exports2.GLOBSTAR)) {
        return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);
      }
      return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);
    }
    #matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {
      const firstgs = pattern.indexOf(exports2.GLOBSTAR, patternIndex);
      const lastgs = pattern.lastIndexOf(exports2.GLOBSTAR);
      const [head, body, tail] = partial ? [
        pattern.slice(patternIndex, firstgs),
        pattern.slice(firstgs + 1),
        []
      ] : [
        pattern.slice(patternIndex, firstgs),
        pattern.slice(firstgs + 1, lastgs),
        pattern.slice(lastgs + 1)
      ];
      if (head.length) {
        const fileHead = file.slice(fileIndex, fileIndex + head.length);
        if (!this.#matchOne(fileHead, head, partial, 0, 0)) {
          return false;
        }
        fileIndex += head.length;
        patternIndex += head.length;
      }
      let fileTailMatch = 0;
      if (tail.length) {
        if (tail.length + fileIndex > file.length)
          return false;
        let tailStart = file.length - tail.length;
        if (this.#matchOne(file, tail, partial, tailStart, 0)) {
          fileTailMatch = tail.length;
        } else {
          if (file[file.length - 1] !== "" || fileIndex + tail.length === file.length) {
            return false;
          }
          tailStart--;
          if (!this.#matchOne(file, tail, partial, tailStart, 0)) {
            return false;
          }
          fileTailMatch = tail.length + 1;
        }
      }
      if (!body.length) {
        let sawSome = !!fileTailMatch;
        for (let i2 = fileIndex;i2 < file.length - fileTailMatch; i2++) {
          const f = String(file[i2]);
          sawSome = true;
          if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
            return false;
          }
        }
        return partial || sawSome;
      }
      const bodySegments = [[[], 0]];
      let currentBody = bodySegments[0];
      let nonGsParts = 0;
      const nonGsPartsSums = [0];
      for (const b of body) {
        if (b === exports2.GLOBSTAR) {
          nonGsPartsSums.push(nonGsParts);
          currentBody = [[], 0];
          bodySegments.push(currentBody);
        } else {
          currentBody[0].push(b);
          nonGsParts++;
        }
      }
      let i = bodySegments.length - 1;
      const fileLength = file.length - fileTailMatch;
      for (const b of bodySegments) {
        b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);
      }
      return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);
    }
    #matchGlobStarBodySections(file, bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {
      const bs = bodySegments[bodyIndex];
      if (!bs) {
        for (let i = fileIndex;i < file.length; i++) {
          sawTail = true;
          const f = file[i];
          if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
            return false;
          }
        }
        return sawTail;
      }
      const [body, after] = bs;
      while (fileIndex <= after) {
        const m = this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0);
        if (m && globStarDepth < this.maxGlobstarRecursion) {
          const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);
          if (sub !== false) {
            return sub;
          }
        }
        const f = file[fileIndex];
        if (f === "." || f === ".." || !this.options.dot && f.startsWith(".")) {
          return false;
        }
        fileIndex++;
      }
      return partial || null;
    }
    #matchOne(file, pattern, partial, fileIndex, patternIndex) {
      let fi;
      let pi;
      let pl;
      let fl;
      for (fi = fileIndex, pi = patternIndex, fl = file.length, pl = pattern.length;fi < fl && pi < pl; fi++, pi++) {
        this.debug("matchOne loop");
        let p = pattern[pi];
        let f = file[fi];
        this.debug(pattern, p, f);
        if (p === false || p === exports2.GLOBSTAR) {
          return false;
        }
        let hit;
        if (typeof p === "string") {
          hit = f === p;
          this.debug("string match", p, f, hit);
        } else {
          hit = p.test(f);
          this.debug("pattern match", p, f, hit);
        }
        if (!hit)
          return false;
      }
      if (fi === fl && pi === pl) {
        return true;
      } else if (fi === fl) {
        return partial;
      } else if (pi === pl) {
        return fi === fl - 1 && file[fi] === "";
      } else {
        throw new Error("wtf?");
      }
    }
    braceExpand() {
      return (0, exports2.braceExpand)(this.pattern, this.options);
    }
    parse(pattern) {
      (0, assert_valid_pattern_js_1.assertValidPattern)(pattern);
      const options = this.options;
      if (pattern === "**")
        return exports2.GLOBSTAR;
      if (pattern === "")
        return "";
      let m;
      let fastTest = null;
      if (m = pattern.match(starRE)) {
        fastTest = options.dot ? starTestDot : starTest;
      } else if (m = pattern.match(starDotExtRE)) {
        fastTest = (options.nocase ? options.dot ? starDotExtTestNocaseDot : starDotExtTestNocase : options.dot ? starDotExtTestDot : starDotExtTest)(m[1]);
      } else if (m = pattern.match(qmarksRE)) {
        fastTest = (options.nocase ? options.dot ? qmarksTestNocaseDot : qmarksTestNocase : options.dot ? qmarksTestDot : qmarksTest)(m);
      } else if (m = pattern.match(starDotStarRE)) {
        fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
      } else if (m = pattern.match(dotStarRE)) {
        fastTest = dotStarTest;
      }
      const re = ast_js_1.AST.fromGlob(pattern, this.options).toMMPattern();
      if (fastTest && typeof re === "object") {
        Reflect.defineProperty(re, "test", { value: fastTest });
      }
      return re;
    }
    makeRe() {
      if (this.regexp || this.regexp === false)
        return this.regexp;
      const set = this.set;
      if (!set.length) {
        this.regexp = false;
        return this.regexp;
      }
      const options = this.options;
      const twoStar = options.noglobstar ? star : options.dot ? twoStarDot : twoStarNoDot;
      const flags = new Set(options.nocase ? ["i"] : []);
      let re = set.map((pattern) => {
        const pp = pattern.map((p) => {
          if (p instanceof RegExp) {
            for (const f of p.flags.split(""))
              flags.add(f);
          }
          return typeof p === "string" ? regExpEscape(p) : p === exports2.GLOBSTAR ? exports2.GLOBSTAR : p._src;
        });
        pp.forEach((p, i) => {
          const next = pp[i + 1];
          const prev = pp[i - 1];
          if (p !== exports2.GLOBSTAR || prev === exports2.GLOBSTAR) {
            return;
          }
          if (prev === undefined) {
            if (next !== undefined && next !== exports2.GLOBSTAR) {
              pp[i + 1] = "(?:\\/|" + twoStar + "\\/)?" + next;
            } else {
              pp[i] = twoStar;
            }
          } else if (next === undefined) {
            pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + ")?";
          } else if (next !== exports2.GLOBSTAR) {
            pp[i - 1] = prev + "(?:\\/|\\/" + twoStar + "\\/)" + next;
            pp[i + 1] = exports2.GLOBSTAR;
          }
        });
        const filtered = pp.filter((p) => p !== exports2.GLOBSTAR);
        if (this.partial && filtered.length >= 1) {
          const prefixes = [];
          for (let i = 1;i <= filtered.length; i++) {
            prefixes.push(filtered.slice(0, i).join("/"));
          }
          return "(?:" + prefixes.join("|") + ")";
        }
        return filtered.join("/");
      }).join("|");
      const [open, close] = set.length > 1 ? ["(?:", ")"] : ["", ""];
      re = "^" + open + re + close + "$";
      if (this.partial) {
        re = "^(?:\\/|" + open + re.slice(1, -1) + close + ")$";
      }
      if (this.negate)
        re = "^(?!" + re + ").+$";
      try {
        this.regexp = new RegExp(re, [...flags].join(""));
      } catch {
        this.regexp = false;
      }
      return this.regexp;
    }
    slashSplit(p) {
      if (this.preserveMultipleSlashes) {
        return p.split("/");
      } else if (this.isWindows && /^\/\/[^/]+/.test(p)) {
        return ["", ...p.split(/\/+/)];
      } else {
        return p.split(/\/+/);
      }
    }
    match(f, partial = this.partial) {
      this.debug("match", f, this.pattern);
      if (this.comment) {
        return false;
      }
      if (this.empty) {
        return f === "";
      }
      if (f === "/" && partial) {
        return true;
      }
      const options = this.options;
      if (this.isWindows) {
        f = f.split("\\").join("/");
      }
      const ff = this.slashSplit(f);
      this.debug(this.pattern, "split", ff);
      const set = this.set;
      this.debug(this.pattern, "set", set);
      let filename = ff[ff.length - 1];
      if (!filename) {
        for (let i = ff.length - 2;!filename && i >= 0; i--) {
          filename = ff[i];
        }
      }
      for (const pattern of set) {
        let file = ff;
        if (options.matchBase && pattern.length === 1) {
          file = [filename];
        }
        const hit = this.matchOne(file, pattern, partial);
        if (hit) {
          if (options.flipNegate) {
            return true;
          }
          return !this.negate;
        }
      }
      if (options.flipNegate) {
        return false;
      }
      return this.negate;
    }
    static defaults(def) {
      return exports2.minimatch.defaults(def).Minimatch;
    }
  }
  exports2.Minimatch = Minimatch;
  var ast_js_2 = require_ast();
  Object.defineProperty(exports2, "AST", { enumerable: true, get: function() {
    return ast_js_2.AST;
  } });
  var escape_js_2 = require_escape();
  Object.defineProperty(exports2, "escape", { enumerable: true, get: function() {
    return escape_js_2.escape;
  } });
  var unescape_js_2 = require_unescape();
  Object.defineProperty(exports2, "unescape", { enumerable: true, get: function() {
    return unescape_js_2.unescape;
  } });
  exports2.minimatch.AST = ast_js_1.AST;
  exports2.minimatch.Minimatch = Minimatch;
  exports2.minimatch.escape = escape_js_1.escape;
  exports2.minimatch.unescape = unescape_js_1.unescape;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/utils/globPattern.js
var require_globPattern = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.matchGlobPattern = matchGlobPattern;
  var minimatch = __importStar(require_commonjs3());
  var vscode_1 = require("vscode");
  function matchGlobPattern(pattern, resource) {
    let miniMatchPattern;
    if (typeof pattern === "string") {
      miniMatchPattern = pattern.replace(/\\/g, "/");
    } else {
      try {
        const baseUri = vscode_1.Uri.parse(typeof pattern.baseUri === "string" ? pattern.baseUri : pattern.baseUri.uri);
        miniMatchPattern = baseUri.with({ path: baseUri.path + "/" + pattern.pattern }).fsPath.replace(/\\/g, "/");
      } catch (error) {
        return false;
      }
    }
    const matcher = new minimatch.Minimatch(miniMatchPattern, { noext: true });
    if (!matcher.makeRe()) {
      return false;
    }
    return matcher.match(resource.fsPath);
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/diagnostic.js
var require_diagnostic = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DiagnosticFeature = exports2.DiagnosticPullMode = exports2.vsdiag = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var uuid_1 = require_uuid();
  var globPattern_1 = require_globPattern();
  var features_1 = require_features();
  function ensure(target, key) {
    if (target[key] === undefined) {
      target[key] = {};
    }
    return target[key];
  }
  var vsdiag;
  (function(vsdiag2) {
    let DocumentDiagnosticReportKind;
    (function(DocumentDiagnosticReportKind2) {
      DocumentDiagnosticReportKind2["full"] = "full";
      DocumentDiagnosticReportKind2["unChanged"] = "unChanged";
    })(DocumentDiagnosticReportKind = vsdiag2.DocumentDiagnosticReportKind || (vsdiag2.DocumentDiagnosticReportKind = {}));
  })(vsdiag || (exports2.vsdiag = vsdiag = {}));
  var DiagnosticPullMode;
  (function(DiagnosticPullMode2) {
    DiagnosticPullMode2["onType"] = "onType";
    DiagnosticPullMode2["onSave"] = "onSave";
    DiagnosticPullMode2["onFocus"] = "onFocus";
  })(DiagnosticPullMode || (exports2.DiagnosticPullMode = DiagnosticPullMode = {}));
  var RequestStateKind;
  (function(RequestStateKind2) {
    RequestStateKind2["active"] = "open";
    RequestStateKind2["reschedule"] = "reschedule";
    RequestStateKind2["outDated"] = "drop";
  })(RequestStateKind || (RequestStateKind = {}));
  var PullState;
  (function(PullState2) {
    PullState2[PullState2["document"] = 1] = "document";
    PullState2[PullState2["workspace"] = 2] = "workspace";
  })(PullState || (PullState = {}));
  var DocumentOrUri;
  (function(DocumentOrUri2) {
    function asKey(document) {
      return document instanceof vscode_1.Uri ? document.toString() : document.uri.toString();
    }
    DocumentOrUri2.asKey = asKey;
  })(DocumentOrUri || (DocumentOrUri = {}));

  class DocumentPullStateTracker {
    documentPullStates;
    workspacePullStates;
    constructor() {
      this.documentPullStates = new Map;
      this.workspacePullStates = new Map;
    }
    track(kind, document, arg1) {
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      const [key, uri, version] = document instanceof vscode_1.Uri ? [document.toString(), document, arg1] : [document.uri.toString(), document.uri, document.version];
      let state = states.get(key);
      if (state === undefined) {
        state = { document: uri, pulledVersion: version, resultId: undefined };
        states.set(key, state);
      }
      return state;
    }
    update(kind, document, arg1, arg2) {
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      const [key, uri, version, resultId] = document instanceof vscode_1.Uri ? [document.toString(), document, arg1, arg2] : [document.uri.toString(), document.uri, document.version, arg1];
      let state = states.get(key);
      if (state === undefined) {
        state = { document: uri, pulledVersion: version, resultId };
        states.set(key, state);
      } else {
        state.pulledVersion = version;
        state.resultId = resultId;
      }
    }
    unTrack(kind, document) {
      const key = DocumentOrUri.asKey(document);
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      states.delete(key);
    }
    tracks(kind, document) {
      const key = DocumentOrUri.asKey(document);
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      return states.has(key);
    }
    tracksSameVersion(kind, document) {
      const key = document.uri.toString();
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      const state = states.get(key);
      return state !== undefined && state.pulledVersion === document.version;
    }
    getResultId(kind, document) {
      const key = DocumentOrUri.asKey(document);
      const states = kind === PullState.document ? this.documentPullStates : this.workspacePullStates;
      return states.get(key)?.resultId;
    }
    getAllResultIds() {
      const result = [];
      for (let [uri, value] of this.workspacePullStates) {
        if (this.documentPullStates.has(uri)) {
          value = this.documentPullStates.get(uri);
        }
        if (value.resultId !== undefined) {
          result.push({ uri, value: value.resultId });
        }
      }
      return result;
    }
  }

  class DiagnosticRequestor {
    isDisposed;
    client;
    visibleDocuments;
    options;
    onDidChangeDiagnosticsEmitter;
    provider;
    diagnostics;
    openRequests;
    documentStates;
    workspaceErrorCounter;
    workspaceCancellation;
    workspaceTimeout;
    constructor(client, visibleDocuments, options) {
      this.client = client;
      this.visibleDocuments = visibleDocuments;
      this.options = options;
      this.isDisposed = false;
      this.onDidChangeDiagnosticsEmitter = new vscode_1.EventEmitter;
      this.provider = this.createProvider();
      this.diagnostics = this.createDiagnosticCollection();
      this.openRequests = new Map;
      this.documentStates = new DocumentPullStateTracker;
      this.workspaceErrorCounter = 0;
    }
    createDiagnosticCollection() {
      if (this.client.clientOptions.diagnosticCollectionProvider === undefined) {
        return vscode_1.languages.createDiagnosticCollection(this.options.identifier);
      } else {
        return this.client.clientOptions.diagnosticCollectionProvider.create(this.options.identifier, features_1.DiagnosticCollectionSource.pull);
      }
    }
    knows(kind, document) {
      const uri = document instanceof vscode_1.Uri ? document : document.uri;
      return this.documentStates.tracks(kind, document) || this.openRequests.has(uri.toString());
    }
    knowsSameVersion(kind, document) {
      const requestState = this.openRequests.get(document.uri.toString());
      if (requestState === undefined) {
        return this.documentStates.tracksSameVersion(kind, document);
      }
      if (requestState.state === RequestStateKind.reschedule) {
        return true;
      }
      if (requestState.state === RequestStateKind.outDated) {
        return false;
      }
      return requestState.version === document.version;
    }
    forget(kind, document) {
      this.documentStates.unTrack(kind, document);
    }
    pull(document, cb) {
      if (this.isDisposed) {
        return;
      }
      const uri = document instanceof vscode_1.Uri ? document : document.uri;
      this.pullAsync(document).then(() => {
        if (cb) {
          cb();
        }
      }, (error) => {
        this.client.error(`Document pull failed for text document ${uri.toString()}`, error, false);
      });
    }
    async pullAsync(document, version) {
      if (this.isDisposed) {
        return;
      }
      const isUri = document instanceof vscode_1.Uri;
      const uri = isUri ? document : document.uri;
      const key = uri.toString();
      version = isUri ? version : document.version;
      const currentRequestState = this.openRequests.get(key);
      const documentState = isUri ? this.documentStates.track(PullState.document, document, version) : this.documentStates.track(PullState.document, document);
      if (currentRequestState === undefined) {
        const tokenSource = new vscode_1.CancellationTokenSource;
        this.openRequests.set(key, { state: RequestStateKind.active, document, version, tokenSource });
        let report;
        let afterState;
        try {
          report = await this.provider.provideDiagnostics(document, documentState.resultId, tokenSource.token) ?? { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };
        } catch (error) {
          if (error instanceof features_1.LSPCancellationError && vscode_languageserver_protocol_1.DiagnosticServerCancellationData.is(error.data) && error.data.retriggerRequest === false) {
            afterState = { state: RequestStateKind.outDated, document };
          }
          if (afterState === undefined && error instanceof vscode_1.CancellationError) {
            afterState = { state: RequestStateKind.reschedule, document };
          } else {
            throw error;
          }
        }
        afterState = afterState ?? this.openRequests.get(key);
        if (afterState === undefined) {
          this.client.error(`Lost request state in diagnostic pull model. Clearing diagnostics for ${key}`);
          this.diagnostics.delete(uri);
          return;
        }
        this.openRequests.delete(key);
        if (!this.visibleDocuments.isVisible(document)) {
          this.documentStates.unTrack(PullState.document, document);
          return;
        }
        if (afterState.state === RequestStateKind.outDated) {
          return;
        }
        if (report !== undefined) {
          if (report.kind === vsdiag.DocumentDiagnosticReportKind.full) {
            this.diagnostics.set(uri, report.items);
          }
          documentState.pulledVersion = version;
          documentState.resultId = report.resultId;
        }
        if (afterState.state === RequestStateKind.reschedule) {
          this.pull(document);
        }
      } else {
        if (currentRequestState.state === RequestStateKind.active) {
          currentRequestState.tokenSource.cancel();
          this.openRequests.set(key, { state: RequestStateKind.reschedule, document: currentRequestState.document });
        } else if (currentRequestState.state === RequestStateKind.outDated) {
          this.openRequests.set(key, { state: RequestStateKind.reschedule, document: currentRequestState.document });
        }
      }
    }
    forgetDocument(document) {
      if (this.isDisposed) {
        return;
      }
      const uri = document instanceof vscode_1.Uri ? document : document.uri;
      const key = uri.toString();
      const request = this.openRequests.get(key);
      if (this.options.workspaceDiagnostics && uri.scheme !== "untitled") {
        if (request !== undefined) {
          this.openRequests.set(key, { state: RequestStateKind.reschedule, document });
        } else {
          this.pull(document, () => {
            this.forget(PullState.document, document);
          });
        }
        this.forget(PullState.workspace, document);
      } else {
        if (request !== undefined) {
          if (request.state === RequestStateKind.active) {
            request.tokenSource.cancel();
          }
          this.openRequests.set(key, { state: RequestStateKind.outDated, document });
        }
        this.diagnostics.delete(uri);
        this.forget(PullState.document, document);
      }
    }
    pullWorkspace() {
      if (this.isDisposed) {
        return;
      }
      this.pullWorkspaceAsync().then(() => {
        this.workspaceTimeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {
          this.pullWorkspace();
        }, 2000);
      }, (error) => {
        if (!(error instanceof features_1.LSPCancellationError) && !vscode_languageserver_protocol_1.DiagnosticServerCancellationData.is(error.data)) {
          this.client.error(`Workspace diagnostic pull failed.`, error, false);
          this.workspaceErrorCounter++;
        }
        if (this.workspaceErrorCounter <= 5) {
          this.workspaceTimeout = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {
            this.pullWorkspace();
          }, 2000);
        }
      });
    }
    async pullWorkspaceAsync() {
      if (!this.provider.provideWorkspaceDiagnostics || this.isDisposed) {
        return;
      }
      if (this.workspaceCancellation !== undefined) {
        this.workspaceCancellation.cancel();
        this.workspaceCancellation = undefined;
      }
      this.workspaceCancellation = new vscode_1.CancellationTokenSource;
      const previousResultIds = this.documentStates.getAllResultIds().map((item) => {
        return {
          uri: this.client.protocol2CodeConverter.asUri(item.uri),
          value: item.value
        };
      });
      await this.provider.provideWorkspaceDiagnostics(previousResultIds, this.workspaceCancellation.token, (chunk) => {
        if (!chunk || this.isDisposed) {
          return;
        }
        for (const item of chunk.items) {
          if (item.kind === vsdiag.DocumentDiagnosticReportKind.full) {
            if (!this.documentStates.tracks(PullState.document, item.uri)) {
              this.diagnostics.set(item.uri, item.items);
            }
          }
          this.documentStates.update(PullState.workspace, item.uri, item.version ?? undefined, item.resultId);
        }
      });
    }
    createProvider() {
      const result = {
        onDidChangeDiagnostics: this.onDidChangeDiagnosticsEmitter.event,
        provideDiagnostics: (document, previousResultId, token) => {
          const provideDiagnostics = (document2, previousResultId2, token2) => {
            const params = {
              identifier: this.options.identifier,
              textDocument: { uri: this.client.code2ProtocolConverter.asUri(document2 instanceof vscode_1.Uri ? document2 : document2.uri) },
              previousResultId: previousResultId2
            };
            if (this.isDisposed === true || !this.client.isRunning()) {
              return { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };
            }
            return this.client.sendRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, params, token2).then(async (result2) => {
              if (this.isDisposed) {
                return { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };
              }
              if (token2.isCancellationRequested) {
                throw new vscode_1.CancellationError;
              }
              if (result2 === undefined || result2 === null) {
                return { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] };
              }
              if (result2.kind === vscode_languageserver_protocol_1.DocumentDiagnosticReportKind.Full) {
                return { kind: vsdiag.DocumentDiagnosticReportKind.full, resultId: result2.resultId, items: await this.client.protocol2CodeConverter.asDiagnostics(result2.items, token2) };
              } else {
                return { kind: vsdiag.DocumentDiagnosticReportKind.unChanged, resultId: result2.resultId };
              }
            }, (error) => {
              return this.client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, token2, error, { kind: vsdiag.DocumentDiagnosticReportKind.full, items: [] }, true, true);
            });
          };
          const middleware = this.client.middleware;
          return middleware.provideDiagnostics ? middleware.provideDiagnostics(document, previousResultId, token, provideDiagnostics) : provideDiagnostics(document, previousResultId, token);
        }
      };
      if (this.options.workspaceDiagnostics) {
        result.provideWorkspaceDiagnostics = (resultIds, token, resultReporter) => {
          const convertReport = async (report) => {
            if (report.kind === vscode_languageserver_protocol_1.DocumentDiagnosticReportKind.Full) {
              return {
                kind: vsdiag.DocumentDiagnosticReportKind.full,
                uri: this.client.protocol2CodeConverter.asUri(report.uri),
                resultId: report.resultId,
                version: report.version,
                items: await this.client.protocol2CodeConverter.asDiagnostics(report.items, token)
              };
            } else {
              return {
                kind: vsdiag.DocumentDiagnosticReportKind.unChanged,
                uri: this.client.protocol2CodeConverter.asUri(report.uri),
                resultId: report.resultId,
                version: report.version
              };
            }
          };
          const convertPreviousResultIds = (resultIds2) => {
            const converted = [];
            for (const item of resultIds2) {
              converted.push({ uri: this.client.code2ProtocolConverter.asUri(item.uri), value: item.value });
            }
            return converted;
          };
          const provideDiagnostics = (resultIds2, token2, resultReporter2) => {
            const partialResultToken = (0, uuid_1.generateUuid)();
            const disposable = this.client.onProgress(vscode_languageserver_protocol_1.WorkspaceDiagnosticRequest.partialResult, partialResultToken, async (partialResult) => {
              if (partialResult === undefined || partialResult === null) {
                resultReporter2(null);
                return;
              }
              const converted = {
                items: []
              };
              for (const item of partialResult.items) {
                try {
                  converted.items.push(await convertReport(item));
                } catch (error) {
                  this.client.error(`Converting workspace diagnostics failed.`, error);
                }
              }
              resultReporter2(converted);
            });
            const params = {
              identifier: this.options.identifier,
              previousResultIds: convertPreviousResultIds(resultIds2),
              partialResultToken
            };
            if (this.isDisposed === true || !this.client.isRunning()) {
              return { items: [] };
            }
            return this.client.sendRequest(vscode_languageserver_protocol_1.WorkspaceDiagnosticRequest.type, params, token2).then(async (result2) => {
              if (token2.isCancellationRequested) {
                return { items: [] };
              }
              const converted = {
                items: []
              };
              for (const item of result2.items) {
                converted.items.push(await convertReport(item));
              }
              disposable.dispose();
              resultReporter2(converted);
              return { items: [] };
            }, (error) => {
              disposable.dispose();
              return this.client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type, token2, error, { items: [] });
            });
          };
          const middleware = this.client.middleware;
          return middleware.provideWorkspaceDiagnostics ? middleware.provideWorkspaceDiagnostics(resultIds, token, resultReporter, provideDiagnostics) : provideDiagnostics(resultIds, token, resultReporter);
        };
      }
      return result;
    }
    dispose() {
      this.isDisposed = true;
      this.workspaceCancellation?.cancel();
      this.workspaceTimeout?.dispose();
      for (const [key, request] of this.openRequests) {
        if (request.state === RequestStateKind.active) {
          request.tokenSource.cancel();
        }
        this.openRequests.set(key, { state: RequestStateKind.outDated, document: request.document });
      }
      if (this.client.clientOptions.diagnosticCollectionProvider !== undefined) {
        this.client.clientOptions.diagnosticCollectionProvider.dispose(this.diagnostics, features_1.DiagnosticCollectionSource.pull);
      } else {
        this.diagnostics.dispose();
      }
    }
  }

  class BackgroundScheduler {
    client;
    diagnosticRequestor;
    lastDocumentToPull;
    documents;
    timeoutHandle;
    isDisposed;
    constructor(client, diagnosticRequestor) {
      this.client = client;
      this.diagnosticRequestor = diagnosticRequestor;
      this.documents = new vscode_languageserver_protocol_1.LinkedMap;
      this.isDisposed = false;
    }
    add(document) {
      if (this.isDisposed === true) {
        return;
      }
      const key = DocumentOrUri.asKey(document);
      if (this.documents.has(key)) {
        return;
      }
      this.documents.set(key, document, vscode_languageserver_protocol_1.Touch.Last);
      this.lastDocumentToPull = document;
    }
    remove(document) {
      const key = DocumentOrUri.asKey(document);
      this.documents.delete(key);
      if (this.documents.size === 0) {
        this.stop();
        return;
      } else if (key === this.lastDocumentToPullKey()) {
        const before = this.documents.before(key);
        if (before === undefined) {
          this.stop();
        } else {
          this.lastDocumentToPull = before;
        }
      }
    }
    trigger() {
      this.lastDocumentToPull = this.documents.last;
      this.runLoop();
    }
    runLoop() {
      if (this.isDisposed === true) {
        return;
      }
      if (this.documents.size === 0) {
        this.stop();
        return;
      }
      if (this.lastDocumentToPull === undefined) {
        return;
      }
      if (this.timeoutHandle !== undefined) {
        return;
      }
      this.timeoutHandle = (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(() => {
        const document = this.documents.first;
        if (document === undefined) {
          return;
        }
        const key = DocumentOrUri.asKey(document);
        this.diagnosticRequestor.pullAsync(document).catch((error) => {
          this.client.error(`Document pull failed for text document ${key}`, error, false);
        }).finally(() => {
          this.timeoutHandle = undefined;
          this.documents.set(key, document, vscode_languageserver_protocol_1.Touch.Last);
          if (key !== this.lastDocumentToPullKey()) {
            this.runLoop();
          }
        });
      }, 500);
    }
    dispose() {
      this.isDisposed = true;
      this.stop();
      this.documents.clear();
      this.lastDocumentToPull = undefined;
    }
    stop() {
      this.timeoutHandle?.dispose();
      this.timeoutHandle = undefined;
      this.lastDocumentToPull = undefined;
    }
    lastDocumentToPullKey() {
      return this.lastDocumentToPull !== undefined ? DocumentOrUri.asKey(this.lastDocumentToPull) : undefined;
    }
  }

  class DiagnosticFeatureProviderImpl {
    disposable;
    diagnosticRequestor;
    activeTextDocument;
    backgroundScheduler;
    constructor(client, visibleDocuments, options) {
      const diagnosticPullOptions = Object.assign({ onChange: false, onSave: false, onFocus: false }, client.clientOptions.diagnosticPullOptions);
      const documentSelector = client.protocol2CodeConverter.asDocumentSelector(options.documentSelector);
      const disposables = [];
      const matchFilter = (filter, resource) => {
        if (typeof filter === "string") {
          return false;
        }
        if (filter.language !== undefined && filter.language !== "*") {
          return false;
        }
        if (filter.scheme !== undefined && filter.scheme !== "*" && filter.scheme !== resource.scheme) {
          return false;
        }
        if (filter.pattern !== undefined && !(0, globPattern_1.matchGlobPattern)(filter.pattern, resource)) {
          return false;
        }
        return true;
      };
      const matchResource = (resource) => {
        const selector = options.documentSelector;
        if (diagnosticPullOptions.match !== undefined) {
          return diagnosticPullOptions.match(selector, resource);
        }
        for (const filter of selector) {
          if (!vscode_languageserver_protocol_1.TextDocumentFilter.is(filter)) {
            continue;
          }
          if (matchFilter(filter, resource)) {
            return true;
          }
        }
        return false;
      };
      const matches = (document) => {
        return document instanceof vscode_1.Uri ? matchResource(document) : vscode_1.languages.match(documentSelector, document) > 0 && visibleDocuments.isVisible(document);
      };
      const matchesCell = (cell) => {
        return vscode_1.languages.match(documentSelector, cell.document) > 0 && visibleDocuments.isVisible(cell.notebook.uri);
      };
      const isActiveDocument = (document) => {
        return document instanceof vscode_1.Uri ? this.activeTextDocument?.uri.toString() === document.toString() : this.activeTextDocument === document;
      };
      this.diagnosticRequestor = new DiagnosticRequestor(client, visibleDocuments, options);
      this.backgroundScheduler = new BackgroundScheduler(client, this.diagnosticRequestor);
      const addToBackgroundIfNeeded = (document) => {
        if (!matches(document) || !options.interFileDependencies || isActiveDocument(document) || diagnosticPullOptions.onChange === false) {
          return;
        }
        this.backgroundScheduler.add(document);
      };
      const considerDocument = (textDocument, mode) => {
        return (diagnosticPullOptions.filter === undefined || !diagnosticPullOptions.filter(textDocument, mode)) && this.diagnosticRequestor.knows(PullState.document, textDocument);
      };
      this.activeTextDocument = vscode_1.window.activeTextEditor?.document;
      disposables.push(vscode_1.window.onDidChangeActiveTextEditor((editor) => {
        const oldActive = this.activeTextDocument;
        this.activeTextDocument = editor?.document;
        if (oldActive !== undefined) {
          addToBackgroundIfNeeded(oldActive);
        }
        if (this.activeTextDocument !== undefined) {
          this.backgroundScheduler.remove(this.activeTextDocument);
          if (diagnosticPullOptions.onFocus === true && matches(this.activeTextDocument) && considerDocument(this.activeTextDocument, DiagnosticPullMode.onFocus)) {
            this.diagnosticRequestor.pull(this.activeTextDocument);
          }
        }
      }));
      const openFeature = client.getFeature(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.method);
      disposables.push(openFeature.onNotificationSent((event) => {
        const textDocument = event.textDocument;
        if (this.diagnosticRequestor.knowsSameVersion(PullState.document, textDocument)) {
          return;
        }
        if (matches(textDocument)) {
          this.diagnosticRequestor.pull(textDocument, () => {
            addToBackgroundIfNeeded(textDocument);
          });
        }
      }));
      const notebookFeature = client.getFeature(vscode_languageserver_protocol_1.NotebookDocumentSyncRegistrationType.method);
      disposables.push(notebookFeature.onOpenNotificationSent((event) => {
        for (const cell of event.getCells()) {
          if (matchesCell(cell)) {
            this.diagnosticRequestor.pull(cell.document, () => {
              addToBackgroundIfNeeded(cell.document);
            });
          }
        }
      }));
      disposables.push(visibleDocuments.onOpen((opened) => {
        for (const resource of opened) {
          if (this.diagnosticRequestor.knows(PullState.document, resource)) {
            continue;
          }
          const uriStr = resource.toString();
          let textDocument;
          for (const item of vscode_1.workspace.textDocuments) {
            if (uriStr === item.uri.toString()) {
              textDocument = item;
              break;
            }
          }
          if (textDocument !== undefined && matches(textDocument)) {
            this.diagnosticRequestor.pull(textDocument, () => {
              addToBackgroundIfNeeded(textDocument);
            });
          }
        }
      }));
      const pulledTextDocuments = new Set;
      for (const textDocument of vscode_1.workspace.textDocuments) {
        if (matches(textDocument)) {
          this.diagnosticRequestor.pull(textDocument, () => {
            addToBackgroundIfNeeded(textDocument);
          });
          pulledTextDocuments.add(textDocument.uri.toString());
        }
      }
      for (const notebookDocument of vscode_1.workspace.notebookDocuments) {
        for (const cell of notebookDocument.getCells()) {
          if (matchesCell(cell)) {
            this.diagnosticRequestor.pull(cell.document, () => {
              addToBackgroundIfNeeded(cell.document);
            });
            pulledTextDocuments.add(cell.document.uri.toString());
          }
        }
      }
      if (diagnosticPullOptions.onTabs === true) {
        for (const resource of visibleDocuments.getResources()) {
          if (!pulledTextDocuments.has(resource.toString()) && matches(resource)) {
            this.diagnosticRequestor.pull(resource, () => {
              addToBackgroundIfNeeded(resource);
            });
          }
        }
      }
      if (diagnosticPullOptions.onChange === true) {
        const changeFeature = client.getFeature(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.method);
        disposables.push(changeFeature.onNotificationSent(async (event) => {
          const textDocument = event.textDocument;
          if (considerDocument(textDocument, DiagnosticPullMode.onType)) {
            this.diagnosticRequestor.pull(textDocument, () => {
              this.backgroundScheduler.trigger();
            });
          }
        }));
        disposables.push(notebookFeature.onChangeNotificationSent(async (event) => {
          const textEvents = event.cells?.textContent || [];
          const changedCells = textEvents.map((c) => event.notebook.getCells().find((cell) => cell.document.uri.toString() === c.document.uri.toString()));
          for (const cell of changedCells) {
            if (cell && matchesCell(cell)) {
              this.diagnosticRequestor.pull(cell.document, () => {
                this.backgroundScheduler.trigger();
              });
            }
          }
          const closedCells = event.cells?.structure?.didClose || [];
          for (const cell of closedCells) {
            this.diagnosticRequestor.forgetDocument(cell.document);
          }
          const openedCells = event.cells?.structure?.didOpen || [];
          for (const cell of openedCells) {
            if (matchesCell(cell)) {
              this.diagnosticRequestor.pull(cell.document, () => {
                this.backgroundScheduler.trigger();
              });
            }
          }
        }));
      }
      if (diagnosticPullOptions.onSave === true) {
        const saveFeature = client.getFeature(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.method);
        disposables.push(saveFeature.onNotificationSent((event) => {
          const textDocument = event.textDocument;
          if (considerDocument(textDocument, DiagnosticPullMode.onSave)) {
            this.diagnosticRequestor.pull(event.textDocument);
          }
        }));
        disposables.push(notebookFeature.onSaveNotificationSent((event) => {
          for (const cell of event.getCells()) {
            if (matchesCell(cell)) {
              this.diagnosticRequestor.pull(cell.document);
            }
          }
        }));
      }
      const closeFeature = client.getFeature(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.method);
      disposables.push(closeFeature.onAboutToSendNotification((event) => {
        this.cleanUpDocument(event.textDocument);
      }));
      disposables.push(notebookFeature.onCloseNotificationSent((event) => {
        for (const cell of event.getCells()) {
          this.cleanUpDocument(cell.document);
        }
      }));
      disposables.push(visibleDocuments.onClose((closed) => {
        for (const document of closed) {
          this.cleanUpDocument(document);
        }
      }));
      this.diagnosticRequestor.onDidChangeDiagnosticsEmitter.event(() => {
        for (const textDocument of vscode_1.workspace.textDocuments) {
          if (matches(textDocument)) {
            this.diagnosticRequestor.pull(textDocument);
          }
        }
      });
      if (options.workspaceDiagnostics === true && options.identifier !== "da348dc5-c30a-4515-9d98-31ff3be38d14") {
        this.diagnosticRequestor.pullWorkspace();
      }
      this.disposable = vscode_1.Disposable.from(...disposables, this.backgroundScheduler, this.diagnosticRequestor);
    }
    get onDidChangeDiagnosticsEmitter() {
      return this.diagnosticRequestor.onDidChangeDiagnosticsEmitter;
    }
    get diagnostics() {
      return this.diagnosticRequestor.provider;
    }
    forget(document) {
      this.cleanUpDocument(document);
    }
    cleanUpDocument(document) {
      this.backgroundScheduler.remove(document);
      if (this.diagnosticRequestor.knows(PullState.document, document)) {
        this.diagnosticRequestor.forgetDocument(document);
      }
    }
  }

  class DiagnosticFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentDiagnosticRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = ensure(ensure(capabilities, "textDocument"), "diagnostic");
      capability.relatedInformation = true;
      capability.tagSupport = { valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated] };
      capability.codeDescriptionSupport = true;
      capability.dataSupport = true;
      capability.dynamicRegistration = true;
      capability.relatedDocumentSupport = false;
      capability.markupMessageSupport = false;
      ensure(ensure(capabilities, "workspace"), "diagnostics").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.DiagnosticRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeDiagnosticsEmitter.fire();
        }
      });
      const [id, options] = this.getRegistration(documentSelector, capabilities.diagnosticProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    clear() {
      super.clear();
    }
    refresh() {
      for (const provider of this.getAllProviders()) {
        provider.onDidChangeDiagnosticsEmitter.fire();
      }
    }
    registerLanguageProvider(options) {
      const provider = new DiagnosticFeatureProviderImpl(this._client, this._client.visibleDocuments, options);
      return [provider.disposable, provider];
    }
  }
  exports2.DiagnosticFeature = DiagnosticFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/notebook.js
var require_notebook = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.NotebookDocumentSyncFeature = undefined;
  var vscode = __importStar(require("vscode"));
  var proto = __importStar(require_api2());
  var UUID = __importStar(require_uuid());
  var Is = __importStar(require_is());
  var globPattern_1 = require_globPattern();
  function ensure(target, key) {
    if (target[key] === undefined) {
      target[key] = {};
    }
    return target[key];
  }
  var Converter;
  (function(Converter2) {
    let c2p;
    (function(c2p2) {
      function asVersionedNotebookDocumentIdentifier(notebookDocument, base) {
        return {
          version: notebookDocument.version,
          uri: base.asUri(notebookDocument.uri)
        };
      }
      c2p2.asVersionedNotebookDocumentIdentifier = asVersionedNotebookDocumentIdentifier;
      function asNotebookDocument(notebookDocument, cells, base) {
        const result = proto.NotebookDocument.create(base.asUri(notebookDocument.uri), notebookDocument.notebookType, notebookDocument.version, asNotebookCells(cells, base));
        if (Object.keys(notebookDocument.metadata).length > 0) {
          result.metadata = asMetadata(notebookDocument.metadata);
        }
        return result;
      }
      c2p2.asNotebookDocument = asNotebookDocument;
      function asNotebookCells(cells, base) {
        return cells.map((cell) => asNotebookCell(cell, base));
      }
      c2p2.asNotebookCells = asNotebookCells;
      function asMetadata(metadata) {
        const seen = new Set;
        return deepCopy(seen, metadata);
      }
      c2p2.asMetadata = asMetadata;
      function asNotebookCell(cell, base) {
        const result = proto.NotebookCell.create(asNotebookCellKind(cell.kind), base.asUri(cell.document.uri));
        if (Object.keys(cell.metadata).length > 0) {
          result.metadata = asMetadata(cell.metadata);
        }
        if (cell.executionSummary !== undefined && (Is.number(cell.executionSummary.executionOrder) && Is.boolean(cell.executionSummary.success))) {
          result.executionSummary = {
            executionOrder: cell.executionSummary.executionOrder,
            success: cell.executionSummary.success
          };
        }
        return result;
      }
      c2p2.asNotebookCell = asNotebookCell;
      function asNotebookCellKind(kind) {
        switch (kind) {
          case vscode.NotebookCellKind.Markup:
            return proto.NotebookCellKind.Markup;
          case vscode.NotebookCellKind.Code:
            return proto.NotebookCellKind.Code;
        }
      }
      function deepCopy(seen, value) {
        if (seen.has(value)) {
          throw new Error(`Can't deep copy cyclic structures.`);
        }
        if (Array.isArray(value)) {
          const result = [];
          for (const elem of value) {
            if (elem !== null && typeof elem === "object" || Array.isArray(elem)) {
              result.push(deepCopy(seen, elem));
            } else {
              if (elem instanceof RegExp) {
                throw new Error(`Can't transfer regular expressions to the server`);
              }
              result.push(elem);
            }
          }
          return result;
        } else {
          const props = Object.keys(value);
          const result = Object.create(null);
          for (const prop of props) {
            const elem = value[prop];
            if (elem !== null && typeof elem === "object" || Array.isArray(elem)) {
              result[prop] = deepCopy(seen, elem);
            } else {
              if (elem instanceof RegExp) {
                throw new Error(`Can't transfer regular expressions to the server`);
              }
              result[prop] = elem;
            }
          }
          return result;
        }
      }
      function asTextContentChange(event, base) {
        const params = base.asChangeTextDocumentParams(event, event.document.uri, event.document.version);
        return { document: params.textDocument, changes: params.contentChanges };
      }
      c2p2.asTextContentChange = asTextContentChange;
      function asNotebookDocumentChangeEvent(event, base) {
        const result = Object.create(null);
        if (event.metadata) {
          result.metadata = Converter2.c2p.asMetadata(event.metadata);
        }
        if (event.cells !== undefined) {
          const cells = Object.create(null);
          const changedCells = event.cells;
          if (changedCells.structure) {
            cells.structure = {
              array: {
                start: changedCells.structure.array.start,
                deleteCount: changedCells.structure.array.deleteCount,
                cells: changedCells.structure.array.cells !== undefined ? changedCells.structure.array.cells.map((cell) => Converter2.c2p.asNotebookCell(cell, base)) : undefined
              },
              didOpen: changedCells.structure.didOpen !== undefined ? changedCells.structure.didOpen.map((cell) => base.asOpenTextDocumentParams(cell.document).textDocument) : undefined,
              didClose: changedCells.structure.didClose !== undefined ? changedCells.structure.didClose.map((cell) => base.asCloseTextDocumentParams(cell.document).textDocument) : undefined
            };
          }
          if (changedCells.data !== undefined) {
            cells.data = changedCells.data.map((cell) => Converter2.c2p.asNotebookCell(cell, base));
          }
          if (changedCells.textContent !== undefined) {
            cells.textContent = changedCells.textContent.map((event2) => Converter2.c2p.asTextContentChange(event2, base));
          }
          if (Object.keys(cells).length > 0) {
            result.cells = cells;
          }
        }
        return result;
      }
      c2p2.asNotebookDocumentChangeEvent = asNotebookDocumentChangeEvent;
    })(c2p = Converter2.c2p || (Converter2.c2p = {}));
  })(Converter || (Converter = {}));
  var $NotebookCell;
  (function($NotebookCell2) {
    function computeDiff(originalCells, modifiedCells, compareMetadata) {
      const originalLength = originalCells.length;
      const modifiedLength = modifiedCells.length;
      let startIndex = 0;
      while (startIndex < modifiedLength && startIndex < originalLength && equals(originalCells[startIndex], modifiedCells[startIndex], compareMetadata)) {
        startIndex++;
      }
      if (startIndex < modifiedLength && startIndex < originalLength) {
        let originalEndIndex = originalLength - 1;
        let modifiedEndIndex = modifiedLength - 1;
        while (originalEndIndex >= 0 && modifiedEndIndex >= 0 && equals(originalCells[originalEndIndex], modifiedCells[modifiedEndIndex], compareMetadata)) {
          originalEndIndex--;
          modifiedEndIndex--;
        }
        const deleteCount = originalEndIndex + 1 - startIndex;
        const newCells = startIndex === modifiedEndIndex + 1 ? undefined : modifiedCells.slice(startIndex, modifiedEndIndex + 1);
        return newCells !== undefined ? { start: startIndex, deleteCount, cells: newCells } : { start: startIndex, deleteCount };
      } else if (startIndex < modifiedLength) {
        return { start: startIndex, deleteCount: 0, cells: modifiedCells.slice(startIndex) };
      } else if (startIndex < originalLength) {
        return { start: startIndex, deleteCount: originalLength - startIndex };
      } else {
        return;
      }
    }
    $NotebookCell2.computeDiff = computeDiff;
    function equals(one, other, compareMetaData = true) {
      if (one.kind !== other.kind || one.document.uri.toString() !== other.document.uri.toString() || one.document.languageId !== other.document.languageId || !equalsExecution(one.executionSummary, other.executionSummary)) {
        return false;
      }
      return !compareMetaData || compareMetaData && equalsMetadata(one.metadata, other.metadata);
    }
    function equalsExecution(one, other) {
      if (one === other) {
        return true;
      }
      if (one === undefined || other === undefined) {
        return false;
      }
      return one.executionOrder === other.executionOrder && one.success === other.success && equalsTiming(one.timing, other.timing);
    }
    function equalsTiming(one, other) {
      if (one === other) {
        return true;
      }
      if (one === undefined || other === undefined) {
        return false;
      }
      return one.startTime === other.startTime && one.endTime === other.endTime;
    }
    function equalsMetadata(one, other) {
      if (one === other) {
        return true;
      }
      if (one === null || one === undefined || other === null || other === undefined) {
        return false;
      }
      if (typeof one !== typeof other) {
        return false;
      }
      if (typeof one !== "object") {
        return false;
      }
      const oneArray = Array.isArray(one);
      const otherArray = Array.isArray(other);
      if (oneArray !== otherArray) {
        return false;
      }
      if (oneArray && otherArray) {
        if (one.length !== other.length) {
          return false;
        }
        for (let i = 0;i < one.length; i++) {
          if (!equalsMetadata(one[i], other[i])) {
            return false;
          }
        }
      }
      if (isObjectLiteral(one) && isObjectLiteral(other)) {
        const oneKeys = Object.keys(one);
        const otherKeys = Object.keys(other);
        if (oneKeys.length !== otherKeys.length) {
          return false;
        }
        oneKeys.sort();
        otherKeys.sort();
        if (!equalsMetadata(oneKeys, otherKeys)) {
          return false;
        }
        for (let i = 0;i < oneKeys.length; i++) {
          const prop = oneKeys[i];
          if (!equalsMetadata(one[prop], other[prop])) {
            return false;
          }
        }
        return true;
      }
      return false;
    }
    function isObjectLiteral(value) {
      return value !== null && typeof value === "object";
    }
    $NotebookCell2.isObjectLiteral = isObjectLiteral;
  })($NotebookCell || ($NotebookCell = {}));
  var $NotebookDocumentFilter;
  (function($NotebookDocumentFilter2) {
    function matchNotebook(filter, notebookDocument) {
      if (typeof filter === "string") {
        return filter === "*" || notebookDocument.notebookType === filter;
      }
      if (filter.notebookType !== undefined && filter.notebookType !== "*" && notebookDocument.notebookType !== filter.notebookType) {
        return false;
      }
      const uri = notebookDocument.uri;
      if (filter.scheme !== undefined && filter.scheme !== "*" && uri.scheme !== filter.scheme) {
        return false;
      }
      if (filter.pattern !== undefined) {
        if (!(0, globPattern_1.matchGlobPattern)(filter.pattern, uri)) {
          return false;
        }
      }
      return true;
    }
    $NotebookDocumentFilter2.matchNotebook = matchNotebook;
  })($NotebookDocumentFilter || ($NotebookDocumentFilter = {}));
  var $NotebookDocumentSyncOptions;
  (function($NotebookDocumentSyncOptions2) {
    function asDocumentSelector(options) {
      const selector = options.notebookSelector;
      const result = [];
      for (const element of selector) {
        const notebookType = (typeof element.notebook === "string" ? element.notebook : element.notebook?.notebookType) ?? "*";
        const scheme = typeof element.notebook === "string" ? undefined : element.notebook?.scheme;
        const pattern = typeof element.notebook === "string" ? undefined : element.notebook?.pattern;
        if (element.cells !== undefined) {
          for (const cell of element.cells) {
            result.push(asDocumentFilter(notebookType, scheme, pattern, cell.language));
          }
        } else {
          result.push(asDocumentFilter(notebookType, scheme, pattern, undefined));
        }
      }
      return result;
    }
    $NotebookDocumentSyncOptions2.asDocumentSelector = asDocumentSelector;
    function asDocumentFilter(notebookType, scheme, pattern, language) {
      return scheme === undefined && pattern === undefined ? { notebook: notebookType, language } : { notebook: { notebookType, scheme, pattern }, language };
    }
  })($NotebookDocumentSyncOptions || ($NotebookDocumentSyncOptions = {}));
  var SyncInfo;
  (function(SyncInfo2) {
    function create(cells) {
      return {
        cells,
        uris: new Set(cells.map((cell) => cell.document.uri.toString()))
      };
    }
    SyncInfo2.create = create;
  })(SyncInfo || (SyncInfo = {}));

  class NotebookDocumentSyncFeatureProvider {
    client;
    options;
    notebookSyncInfo;
    notebookDidOpen;
    disposables;
    selector;
    onChangeNotificationSent;
    onOpenNotificationSent;
    onCloseNotificationSent;
    onSaveNotificationSent;
    constructor(client, options, onChangeNotificationSent, onOpenNotificationSent, onCloseNotificationSent, onSaveNotificationSent) {
      this.client = client;
      this.options = options;
      this.notebookSyncInfo = new Map;
      this.notebookDidOpen = new Set;
      this.disposables = [];
      this.selector = client.protocol2CodeConverter.asDocumentSelector($NotebookDocumentSyncOptions.asDocumentSelector(options));
      this.onChangeNotificationSent = onChangeNotificationSent;
      this.onOpenNotificationSent = onOpenNotificationSent;
      this.onCloseNotificationSent = onCloseNotificationSent;
      this.onSaveNotificationSent = onSaveNotificationSent;
      vscode.workspace.onDidOpenNotebookDocument((notebookDocument) => {
        this.notebookDidOpen.add(notebookDocument.uri.toString());
        this.didOpen(notebookDocument);
      }, undefined, this.disposables);
      for (const notebookDocument of vscode.workspace.notebookDocuments) {
        this.notebookDidOpen.add(notebookDocument.uri.toString());
        this.didOpen(notebookDocument);
      }
      vscode.workspace.onDidChangeNotebookDocument((event) => this.didChangeNotebookDocument(event), undefined, this.disposables);
      if (this.options.save === true) {
        vscode.workspace.onDidSaveNotebookDocument((notebookDocument) => this.didSave(notebookDocument), undefined, this.disposables);
      }
      vscode.workspace.onDidCloseNotebookDocument((notebookDocument) => {
        this.didClose(notebookDocument);
        this.notebookDidOpen.delete(notebookDocument.uri.toString());
      }, undefined, this.disposables);
    }
    getState() {
      for (const notebook of vscode.workspace.notebookDocuments) {
        const matchingCells = this.getMatchingCellsConsideringSyncInfo(notebook);
        if (matchingCells !== undefined) {
          return { kind: "document", id: "$internal", registrations: true, matches: true };
        }
      }
      return { kind: "document", id: "$internal", registrations: true, matches: false };
    }
    get mode() {
      return "notebook";
    }
    handles(textDocument) {
      if (vscode.languages.match(this.selector, textDocument) > 0) {
        return true;
      }
      const key = textDocument.uri.toString();
      for (const syncInfo of this.notebookSyncInfo.values()) {
        if (syncInfo.uris.has(key)) {
          return true;
        }
      }
      return false;
    }
    didOpenNotebookCellTextDocument(notebookDocument, cell) {
      if (vscode.languages.match(this.selector, cell.document) === 0) {
        return;
      }
      if (!this.notebookDidOpen.has(notebookDocument.uri.toString())) {
        return;
      }
      const syncInfo = this.getSyncInfo(notebookDocument);
      const cellMatches = this.cellMatches(notebookDocument, cell);
      if (syncInfo !== undefined) {
        const cellIsSynced = syncInfo.uris.has(cell.document.uri.toString());
        if (cellMatches && cellIsSynced || !cellMatches && !cellIsSynced) {
          return;
        }
        if (cellMatches) {
          const matchingCells = this.mergeCells(notebookDocument, syncInfo, [cell]);
          if (matchingCells !== undefined) {
            const event = this.asNotebookDocumentChangeEvent(notebookDocument, undefined, syncInfo, matchingCells);
            if (event !== undefined) {
              this.doSendChange(event, matchingCells).catch(() => {});
            }
          }
        }
      } else {
        if (cellMatches) {
          this.doSendOpen(notebookDocument, [cell]).catch(() => {});
        }
      }
    }
    didChangeNotebookCellTextDocument(notebookDocument, cell, event) {
      if (vscode.languages.match(this.selector, event.document) === 0) {
        return;
      }
      const syncInfo = this.getSyncInfo(notebookDocument);
      if (syncInfo === undefined || !syncInfo.uris.has(cell.document.uri.toString())) {
        return;
      }
      this.doSendChange({
        notebook: notebookDocument,
        cells: { textContent: [event] }
      }, syncInfo.cells).catch(() => {});
    }
    didCloseNotebookCellTextDocument(notebookDocument, cell) {
      const syncInfo = this.getSyncInfo(notebookDocument);
      if (syncInfo === undefined) {
        return;
      }
      const cellUri = cell.document.uri;
      const index = syncInfo.cells.findIndex((item) => item.document.uri.toString() === cellUri.toString());
      if (index === -1) {
        return;
      }
      if (index === 0 && syncInfo.cells.length === 1) {
        this.doSendClose(notebookDocument, syncInfo.cells).catch(() => {});
      } else {
        const newCells = syncInfo.cells.slice();
        const deleted = newCells.splice(index, 1);
        this.doSendChange({
          notebook: notebookDocument,
          cells: {
            structure: {
              array: { start: index, deleteCount: 1 },
              didClose: deleted
            }
          }
        }, newCells).catch(() => {});
      }
    }
    dispose() {
      for (const disposable of this.disposables) {
        disposable.dispose();
      }
    }
    didOpen(notebookDocument, matchingCells, syncInfo = this.getSyncInfo(notebookDocument)) {
      if (syncInfo !== undefined) {
        if (matchingCells === undefined) {
          matchingCells = syncInfo.cells.slice();
        }
        if (matchingCells !== undefined) {
          const event = this.asNotebookDocumentChangeEvent(notebookDocument, undefined, syncInfo, matchingCells);
          if (event !== undefined) {
            this.doSendChange(event, matchingCells).catch(() => {});
          }
        } else {
          this.doSendClose(notebookDocument, []).catch(() => {});
        }
      } else {
        matchingCells = this.getMatchingCells(notebookDocument);
        if (matchingCells === undefined) {
          return;
        }
        this.doSendOpen(notebookDocument, matchingCells).catch(() => {});
      }
    }
    didChangeNotebookDocument(event) {
      const notebookDocument = event.notebook;
      const syncInfo = this.getSyncInfo(notebookDocument);
      if (syncInfo === undefined) {
        if (event.contentChanges.length === 0) {
          return;
        }
        const cells = this.getMatchingCells(notebookDocument);
        if (cells === undefined) {
          return;
        }
        this.didOpen(notebookDocument, cells, syncInfo);
      } else {
        const cells = this.getMatchingCellsFromEvent(notebookDocument, syncInfo, event);
        if (cells === undefined) {
          this.didClose(notebookDocument, syncInfo);
          return;
        }
        const newEvent = this.asNotebookDocumentChangeEvent(event.notebook, event, syncInfo, cells);
        if (newEvent !== undefined) {
          this.doSendChange(newEvent, cells).catch(() => {});
        }
      }
    }
    didSave(notebookDocument) {
      const syncInfo = this.getSyncInfo(notebookDocument);
      if (syncInfo === undefined) {
        return;
      }
      this.doSendSave(notebookDocument).catch(() => {});
    }
    didClose(notebookDocument, syncInfo = this.getSyncInfo(notebookDocument)) {
      if (syncInfo === undefined) {
        return;
      }
      const syncedCells = notebookDocument.getCells().filter((cell) => syncInfo.uris.has(cell.document.uri.toString()));
      this.doSendClose(notebookDocument, syncedCells).catch(() => {});
    }
    async sendDidOpenNotebookDocument(notebookDocument) {
      const syncInfo = this.getSyncInfo(notebookDocument);
      if (syncInfo !== undefined) {
        throw new Error(`Notebook document ${notebookDocument.uri.toString()} is already open`);
      }
      const cells = this.getMatchingCells(notebookDocument);
      if (cells === undefined) {
        return;
      }
      return this.doSendOpen(notebookDocument, cells);
    }
    async doSendOpen(notebookDocument, cells) {
      const send = async (notebookDocument2, cells2) => {
        const cellDocuments = cells2.map((cell) => this.client.code2ProtocolConverter.asTextDocumentItem(cell.document));
        try {
          await this.client.sendNotification(proto.DidOpenNotebookDocumentNotification.type, {
            notebookDocument: Converter.c2p.asNotebookDocument(notebookDocument2, cells2, this.client.code2ProtocolConverter),
            cellTextDocuments: cellDocuments
          });
          this.onOpenNotificationSent.fire(notebookDocument2);
        } catch (error) {
          this.client.error("Sending DidOpenNotebookDocumentNotification failed", error);
          throw error;
        }
      };
      const middleware = this.client.middleware?.notebooks;
      this.notebookSyncInfo.set(notebookDocument.uri.toString(), SyncInfo.create(cells));
      return middleware?.didOpen !== undefined ? middleware.didOpen(notebookDocument, cells, send) : send(notebookDocument, cells);
    }
    async sendDidChangeNotebookDocument(event) {
      const cells = this.getMatchingCellsFromSyncInfo(event.notebook);
      if (cells === undefined) {
        throw new Error(`Received changed event for un-synced notebook ${event.notebook.uri.toString()}`);
      }
      return this.doSendChange(event, cells);
    }
    async doSendChange(event, cells) {
      const send = async (event2) => {
        try {
          await this.client.sendNotification(proto.DidChangeNotebookDocumentNotification.type, {
            notebookDocument: Converter.c2p.asVersionedNotebookDocumentIdentifier(event2.notebook, this.client.code2ProtocolConverter),
            change: Converter.c2p.asNotebookDocumentChangeEvent(event2, this.client.code2ProtocolConverter)
          });
          this.onChangeNotificationSent.fire(event2);
        } catch (error) {
          this.client.error("Sending DidChangeNotebookDocumentNotification failed", error);
          throw error;
        }
      };
      const middleware = this.client.middleware?.notebooks;
      if (event.cells?.structure !== undefined) {
        this.notebookSyncInfo.set(event.notebook.uri.toString(), SyncInfo.create(cells));
      }
      return middleware?.didChange !== undefined ? middleware?.didChange(event, send) : send(event);
    }
    async sendDidSaveNotebookDocument(notebookDocument) {
      return this.doSendSave(notebookDocument);
    }
    async doSendSave(notebookDocument) {
      const send = async (notebookDocument2) => {
        try {
          await this.client.sendNotification(proto.DidSaveNotebookDocumentNotification.type, {
            notebookDocument: { uri: this.client.code2ProtocolConverter.asUri(notebookDocument2.uri) }
          });
          this.onSaveNotificationSent.fire(notebookDocument2);
        } catch (error) {
          this.client.error("Sending DidSaveNotebookDocumentNotification failed", error);
          throw error;
        }
      };
      const middleware = this.client.middleware?.notebooks;
      return middleware?.didSave !== undefined ? middleware.didSave(notebookDocument, send) : send(notebookDocument);
    }
    async sendDidCloseNotebookDocument(notebookDocument) {
      const cells = this.getMatchingCellsFromSyncInfo(notebookDocument);
      if (cells === undefined) {
        throw new Error(`Received close event for un-synced notebook ${notebookDocument.uri.toString()}`);
      }
      return this.doSendClose(notebookDocument, cells);
    }
    async doSendClose(notebookDocument, cells) {
      const send = async (notebookDocument2, cells2) => {
        try {
          await this.client.sendNotification(proto.DidCloseNotebookDocumentNotification.type, {
            notebookDocument: { uri: this.client.code2ProtocolConverter.asUri(notebookDocument2.uri) },
            cellTextDocuments: cells2.map((cell) => this.client.code2ProtocolConverter.asTextDocumentIdentifier(cell.document))
          });
          this.onCloseNotificationSent.fire(notebookDocument2);
        } catch (error) {
          this.client.error("Sending DidCloseNotebookDocumentNotification failed", error);
          throw error;
        }
      };
      const middleware = this.client.middleware?.notebooks;
      this.notebookSyncInfo.delete(notebookDocument.uri.toString());
      return middleware?.didClose !== undefined ? middleware.didClose(notebookDocument, cells, send) : send(notebookDocument, cells);
    }
    getSynchronizedCells(notebookDocument) {
      const syncInfo = this.getSyncInfo(notebookDocument);
      return syncInfo?.cells;
    }
    asNotebookDocumentChangeEvent(notebook, event, syncInfo, matchingCells) {
      if (event !== undefined && event.notebook !== notebook) {
        throw new Error("Notebook must be identical");
      }
      const result = {
        notebook
      };
      if (event?.metadata !== undefined) {
        result.metadata = Converter.c2p.asMetadata(event.metadata);
      }
      let matchingCellsSet;
      if (event?.cellChanges !== undefined && event.cellChanges.length > 0) {
        const data = [];
        matchingCellsSet = new Set(matchingCells.map((cell) => cell.document.uri.toString()));
        for (const cellChange of event.cellChanges) {
          if (matchingCellsSet.has(cellChange.cell.document.uri.toString()) && (cellChange.executionSummary !== undefined || cellChange.metadata !== undefined)) {
            data.push(cellChange.cell);
          }
        }
        if (data.length > 0) {
          result.cells = result.cells ?? {};
          result.cells.data = data;
        }
      }
      if ((event?.contentChanges !== undefined && event.contentChanges.length > 0 || event === undefined) && syncInfo !== undefined && matchingCells !== undefined) {
        const oldCells = syncInfo.cells;
        const newCells = matchingCells;
        const diff = $NotebookCell.computeDiff(oldCells, newCells, false);
        let addedCells;
        let removedCells;
        if (diff !== undefined) {
          addedCells = diff.cells === undefined ? new Map : new Map(diff.cells.map((cell) => [cell.document.uri.toString(), cell]));
          removedCells = diff.deleteCount === 0 ? new Map : new Map(oldCells.slice(diff.start, diff.start + diff.deleteCount).map((cell) => [cell.document.uri.toString(), cell]));
          for (const key of Array.from(removedCells.keys())) {
            if (addedCells.has(key)) {
              removedCells.delete(key);
              addedCells.delete(key);
            }
          }
          result.cells = result.cells ?? {};
          const didOpen = [];
          const didClose = [];
          if (addedCells.size > 0 || removedCells.size > 0) {
            for (const cell of addedCells.values()) {
              didOpen.push(cell);
            }
            for (const cell of removedCells.values()) {
              didClose.push(cell);
            }
          }
          result.cells.structure = {
            array: diff,
            didOpen,
            didClose
          };
        }
      }
      return Object.keys(result).length > 1 ? result : undefined;
    }
    getMatchingCells(notebookDocument, cells = notebookDocument.getCells()) {
      if (this.options.notebookSelector === undefined) {
        return;
      }
      for (const item of this.options.notebookSelector) {
        if (item.notebook === undefined || $NotebookDocumentFilter.matchNotebook(item.notebook, notebookDocument)) {
          const filtered = this.filterCells(notebookDocument, cells, item.cells);
          return filtered.length === 0 ? undefined : filtered;
        }
      }
      return;
    }
    getMatchingCellsFromEvent(notebookDocument, syncInfo, event) {
      if (this.options.notebookSelector === undefined) {
        return;
      }
      let selector;
      for (const item of this.options.notebookSelector) {
        if (item.notebook === undefined || $NotebookDocumentFilter.matchNotebook(item.notebook, notebookDocument)) {
          selector = item;
          break;
        }
      }
      if (selector === undefined) {
        return;
      }
      if ((event.cellChanges === undefined || event.cellChanges.length === 0) && (event.contentChanges === undefined || event.contentChanges.length === 0)) {
        return syncInfo.cells;
      }
      let cells;
      if (event.cellChanges !== undefined && event.cellChanges.length > 0) {
        const changedCells = event.cellChanges.map((item) => item.cell);
        const filtered = this.filterCells(notebookDocument, changedCells, selector.cells);
        if (filtered.length !== changedCells.length) {
          cells = new Set(syncInfo.uris);
          for (const cell of changedCells) {
            cells.delete(cell.document.uri.toString());
          }
          for (const cell of filtered) {
            cells.add(cell.document.uri.toString());
          }
        }
      }
      if (event.contentChanges !== undefined && event.contentChanges.length > 0) {
        if (cells === undefined) {
          cells = new Set(syncInfo.uris);
        }
        for (const item of event.contentChanges) {
          for (const cell of item.removedCells) {
            cells.delete(cell.document.uri.toString());
          }
          const filtered = this.filterCells(notebookDocument, new Array(...item.addedCells), selector.cells);
          for (const cell of filtered) {
            cells.add(cell.document.uri.toString());
          }
        }
      }
      if (cells === undefined) {
        return syncInfo.cells;
      }
      const result = [];
      const current = notebookDocument.getCells();
      for (const cell of current) {
        if (cells.has(cell.document.uri.toString())) {
          result.push(cell);
        }
      }
      return result;
    }
    getMatchingCellsFromSyncInfo(notebook) {
      const syncInfo = this.getSyncInfo(notebook);
      return syncInfo !== undefined ? syncInfo.cells : undefined;
    }
    getMatchingCellsConsideringSyncInfo(notebook) {
      const syncInfo = this.getSyncInfo(notebook);
      return syncInfo !== undefined ? syncInfo.cells : this.getMatchingCells(notebook);
    }
    mergeCells(notebookDocument, syncInfo, cells) {
      const result = [];
      const merged = new Set(syncInfo.uris);
      for (const cell of cells) {
        merged.add(cell.document.uri.toString());
      }
      for (const cell of notebookDocument.getCells()) {
        if (merged.has(cell.document.uri.toString())) {
          result.push(cell);
        }
      }
      return result;
    }
    cellMatches(notebookDocument, cell) {
      const cells = this.getMatchingCells(notebookDocument, [cell]);
      return cells !== undefined && cells[0] === cell;
    }
    filterCells(notebookDocument, cells, cellSelector) {
      const filtered = cellSelector !== undefined ? cells.filter((cell) => {
        const cellLanguage = cell.document.languageId;
        return cellSelector.some((filter) => filter.language === "*" || cellLanguage === filter.language);
      }) : cells;
      return typeof this.client.clientOptions.notebookDocumentOptions?.filterCells === "function" ? this.client.clientOptions.notebookDocumentOptions.filterCells(notebookDocument, filtered) : filtered;
    }
    getSyncInfo(notebook) {
      return this.notebookSyncInfo.get(notebook.uri.toString());
    }
  }

  class NotebookDocumentSyncFeature {
    static CellScheme = "vscode-notebook-cell";
    client;
    registrations;
    dedicatedChannel;
    _onChangeNotificationSent;
    _onOpenNotificationSent;
    _onCloseNotificationSent;
    _onSaveNotificationSent;
    constructor(client) {
      this.client = client;
      this.registrations = new Map;
      this.registrationType = proto.NotebookDocumentSyncRegistrationType.type;
      this._onChangeNotificationSent = new vscode.EventEmitter;
      this._onOpenNotificationSent = new vscode.EventEmitter;
      this._onCloseNotificationSent = new vscode.EventEmitter;
      this._onSaveNotificationSent = new vscode.EventEmitter;
      vscode.workspace.onDidOpenTextDocument((textDocument) => {
        if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {
          return;
        }
        const [notebookDocument, notebookCell] = this.findNotebookDocumentAndCell(textDocument);
        if (notebookDocument === undefined || notebookCell === undefined) {
          return;
        }
        for (const provider of this.registrations.values()) {
          if (provider instanceof NotebookDocumentSyncFeatureProvider) {
            provider.didOpenNotebookCellTextDocument(notebookDocument, notebookCell);
          }
        }
      });
      vscode.workspace.onDidChangeTextDocument((event) => {
        if (event.contentChanges.length === 0) {
          return;
        }
        const textDocument = event.document;
        if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {
          return;
        }
        const [notebookDocument, cell] = this.findNotebookDocumentAndCell(textDocument);
        if (notebookDocument === undefined || cell === undefined) {
          return;
        }
        for (const provider of this.registrations.values()) {
          if (provider instanceof NotebookDocumentSyncFeatureProvider) {
            provider.didChangeNotebookCellTextDocument(notebookDocument, cell, event);
          }
        }
      });
      vscode.workspace.onDidCloseTextDocument((textDocument) => {
        if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {
          return;
        }
        const [notebookDocument, notebookCell] = this.findNotebookDocumentAndCell(textDocument);
        if (notebookDocument === undefined || notebookCell === undefined) {
          return;
        }
        for (const provider of this.registrations.values()) {
          if (provider instanceof NotebookDocumentSyncFeatureProvider) {
            provider.didCloseNotebookCellTextDocument(notebookDocument, notebookCell);
          }
        }
      });
    }
    getState() {
      if (this.registrations.size === 0) {
        return { kind: "document", id: this.registrationType.method, registrations: false, matches: false };
      }
      for (const provider of this.registrations.values()) {
        const state = provider.getState();
        if (state.kind === "document" && state.registrations === true && state.matches === true) {
          return { kind: "document", id: this.registrationType.method, registrations: true, matches: true };
        }
      }
      return { kind: "document", id: this.registrationType.method, registrations: true, matches: false };
    }
    registrationType;
    get onOpenNotificationSent() {
      return this._onOpenNotificationSent.event;
    }
    get onChangeNotificationSent() {
      return this._onChangeNotificationSent.event;
    }
    get onCloseNotificationSent() {
      return this._onCloseNotificationSent.event;
    }
    get onSaveNotificationSent() {
      return this._onSaveNotificationSent.event;
    }
    fillClientCapabilities(capabilities) {
      const synchronization = ensure(ensure(capabilities, "notebookDocument"), "synchronization");
      synchronization.dynamicRegistration = true;
      synchronization.executionSummarySupport = true;
    }
    preInitialize(capabilities) {
      const options = capabilities.notebookDocumentSync;
      if (options === undefined) {
        return;
      }
      this.dedicatedChannel = this.client.protocol2CodeConverter.asDocumentSelector($NotebookDocumentSyncOptions.asDocumentSelector(options));
    }
    initialize(capabilities) {
      const options = capabilities.notebookDocumentSync;
      if (options === undefined) {
        return;
      }
      const id = options.id ?? UUID.generateUuid();
      this.register({ id, registerOptions: options });
    }
    register(data) {
      const provider = new NotebookDocumentSyncFeatureProvider(this.client, data.registerOptions, this._onChangeNotificationSent, this._onOpenNotificationSent, this._onCloseNotificationSent, this._onSaveNotificationSent);
      this.registrations.set(data.id, provider);
    }
    unregister(id) {
      const provider = this.registrations.get(id);
      if (provider !== undefined) {
        this.registrations.delete(id);
        provider.dispose();
      }
    }
    clear() {
      for (const provider of this.registrations.values()) {
        provider.dispose();
      }
      this.registrations.clear();
      this._onChangeNotificationSent.dispose();
      this._onChangeNotificationSent = new vscode.EventEmitter;
      this._onOpenNotificationSent.dispose();
      this._onOpenNotificationSent = new vscode.EventEmitter;
      this._onCloseNotificationSent.dispose();
      this._onCloseNotificationSent = new vscode.EventEmitter;
      this._onSaveNotificationSent.dispose();
      this._onSaveNotificationSent = new vscode.EventEmitter;
    }
    handles(textDocument) {
      if (textDocument.uri.scheme !== NotebookDocumentSyncFeature.CellScheme) {
        return false;
      }
      if (this.dedicatedChannel !== undefined && vscode.languages.match(this.dedicatedChannel, textDocument) > 0) {
        return true;
      }
      for (const provider of this.registrations.values()) {
        if (provider.handles(textDocument)) {
          return true;
        }
      }
      return false;
    }
    getProvider(notebookCell) {
      for (const provider of this.registrations.values()) {
        if (provider.handles(notebookCell.document)) {
          return provider;
        }
      }
      return;
    }
    findNotebookDocumentAndCell(textDocument) {
      const uri = textDocument.uri.toString();
      for (const notebookDocument of vscode.workspace.notebookDocuments) {
        for (const cell of notebookDocument.getCells()) {
          if (cell.document.uri.toString() === uri) {
            return [notebookDocument, cell];
          }
        }
      }
      return [undefined, undefined];
    }
  }
  exports2.NotebookDocumentSyncFeature = NotebookDocumentSyncFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/configuration.js
var require_configuration = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SyncConfigurationFeature = exports2.ConfigurationFeature = undefined;
  exports2.toJSONObject = toJSONObject;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var Is = __importStar(require_is());
  var UUID = __importStar(require_uuid());
  var features_1 = require_features();

  class ConfigurationFeature {
    _client;
    constructor(client) {
      this._client = client;
    }
    getState() {
      return { kind: "static" };
    }
    fillClientCapabilities(capabilities) {
      capabilities.workspace = capabilities.workspace || {};
      capabilities.workspace.configuration = true;
    }
    initialize() {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, (params, token) => {
        const configuration = (params2) => {
          const result = [];
          for (const item of params2.items) {
            const resource = item.scopeUri !== undefined && item.scopeUri !== null ? this._client.protocol2CodeConverter.asUri(item.scopeUri) : undefined;
            result.push(this.getConfiguration(resource, item.section !== null ? item.section : undefined));
          }
          return result;
        };
        const middleware = client.middleware.workspace;
        return middleware && middleware.configuration ? middleware.configuration(params, token, configuration) : configuration(params, token);
      });
    }
    getConfiguration(resource, section) {
      let result = null;
      if (section) {
        const index = section.lastIndexOf(".");
        if (index === -1) {
          result = toJSONObject(vscode_1.workspace.getConfiguration(undefined, resource).get(section));
        } else {
          const config = vscode_1.workspace.getConfiguration(section.substr(0, index), resource);
          if (config) {
            result = toJSONObject(config.get(section.substr(index + 1)));
          }
        }
      } else {
        const config = vscode_1.workspace.getConfiguration(undefined, resource);
        result = {};
        for (const key of Object.keys(config)) {
          if (config.has(key)) {
            result[key] = toJSONObject(config.get(key));
          }
        }
      }
      if (result === undefined) {
        result = null;
      }
      return result;
    }
    clear() {}
  }
  exports2.ConfigurationFeature = ConfigurationFeature;
  function toJSONObject(obj) {
    if (obj) {
      if (Array.isArray(obj)) {
        return obj.map(toJSONObject);
      } else if (typeof obj === "object") {
        const res = Object.create(null);
        for (const key in obj) {
          if (Object.prototype.hasOwnProperty.call(obj, key)) {
            res[key] = toJSONObject(obj[key]);
          }
        }
        return res;
      }
    }
    return obj;
  }

  class SyncConfigurationFeature {
    _client;
    isCleared;
    _listeners;
    constructor(_client) {
      this._client = _client;
      this.isCleared = false;
      this._listeners = new Map;
    }
    getState() {
      return { kind: "workspace", id: this.registrationType.method, registrations: this._listeners.size > 0 };
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "didChangeConfiguration").dynamicRegistration = true;
    }
    initialize() {
      this.isCleared = false;
      const section = this._client.clientOptions.synchronize?.configurationSection;
      if (section !== undefined) {
        this.register({
          id: UUID.generateUuid(),
          registerOptions: {
            section
          }
        });
      }
    }
    register(data) {
      const disposable = vscode_1.workspace.onDidChangeConfiguration((event) => {
        this.onDidChangeConfiguration(data.registerOptions.section, event);
      });
      this._listeners.set(data.id, disposable);
      if (data.registerOptions.section !== undefined) {
        this.onDidChangeConfiguration(data.registerOptions.section, undefined);
      }
    }
    unregister(id) {
      const disposable = this._listeners.get(id);
      if (disposable) {
        this._listeners.delete(id);
        disposable.dispose();
      }
    }
    clear() {
      for (const disposable of this._listeners.values()) {
        disposable.dispose();
      }
      this._listeners.clear();
      this.isCleared = true;
    }
    onDidChangeConfiguration(configurationSection, event) {
      if (this.isCleared) {
        return;
      }
      let sections;
      if (Is.string(configurationSection)) {
        sections = [configurationSection];
      } else {
        sections = configurationSection;
      }
      if (sections !== undefined && event !== undefined) {
        const affected = sections.some((section) => event.affectsConfiguration(section));
        if (!affected) {
          return;
        }
      }
      const didChangeConfiguration = async (sections2) => {
        if (sections2 === undefined) {
          return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: null });
        } else {
          return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, { settings: this.extractSettingsInformation(sections2) });
        }
      };
      const middleware = this._client.middleware.workspace?.didChangeConfiguration;
      (middleware ? middleware(sections, didChangeConfiguration) : didChangeConfiguration(sections)).catch((error) => {
        this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type.method} failed`, error);
      });
    }
    extractSettingsInformation(keys) {
      function ensurePath(config, path) {
        let current = config;
        for (let i = 0;i < path.length - 1; i++) {
          let obj = current[path[i]];
          if (!obj) {
            obj = Object.create(null);
            current[path[i]] = obj;
          }
          current = obj;
        }
        return current;
      }
      const resource = this._client.clientOptions.workspaceFolder ? this._client.clientOptions.workspaceFolder.uri : undefined;
      const result = Object.create(null);
      for (let i = 0;i < keys.length; i++) {
        const key = keys[i];
        const index = key.indexOf(".");
        let config = null;
        if (index >= 0) {
          config = vscode_1.workspace.getConfiguration(key.substr(0, index), resource).get(key.substr(index + 1));
        } else {
          config = vscode_1.workspace.getConfiguration(undefined, resource).get(key);
        }
        if (config) {
          const path = keys[i].split(".");
          ensurePath(result, path)[path[path.length - 1]] = toJSONObject(config);
        }
      }
      return result;
    }
  }
  exports2.SyncConfigurationFeature = SyncConfigurationFeature;
});

// editors/vscode/node_modules/vscode-languageserver-textdocument/lib/umd/main.js
var require_main2 = __commonJS((exports2, module2) => {
  var __spreadArray = exports2 && exports2.__spreadArray || function(to, from, pack) {
    if (pack || arguments.length === 2)
      for (var i = 0, l = from.length, ar;i < l; i++) {
        if (ar || !(i in from)) {
          if (!ar)
            ar = Array.prototype.slice.call(from, 0, i);
          ar[i] = from[i];
        }
      }
    return to.concat(ar || Array.prototype.slice.call(from));
  };
  (function(factory) {
    if (typeof module2 === "object" && typeof module2.exports === "object") {
      var v = factory(require, exports2);
      if (v !== undefined)
        module2.exports = v;
    } else if (typeof define === "function" && define.amd) {
      define(["require", "exports"], factory);
    }
  })(function(require2, exports3) {
    Object.defineProperty(exports3, "__esModule", { value: true });
    exports3.TextDocument = undefined;
    var FullTextDocument = function() {
      function FullTextDocument2(uri, languageId, version, content) {
        this._uri = uri;
        this._languageId = languageId;
        this._version = version;
        this._content = content;
        this._lineOffsets = undefined;
      }
      Object.defineProperty(FullTextDocument2.prototype, "uri", {
        get: function() {
          return this._uri;
        },
        enumerable: false,
        configurable: true
      });
      Object.defineProperty(FullTextDocument2.prototype, "languageId", {
        get: function() {
          return this._languageId;
        },
        enumerable: false,
        configurable: true
      });
      Object.defineProperty(FullTextDocument2.prototype, "version", {
        get: function() {
          return this._version;
        },
        enumerable: false,
        configurable: true
      });
      FullTextDocument2.prototype.getText = function(range) {
        if (range) {
          var start = this.offsetAt(range.start);
          var end = this.offsetAt(range.end);
          return this._content.substring(start, end);
        }
        return this._content;
      };
      FullTextDocument2.prototype.update = function(changes, version) {
        for (var _i = 0, changes_1 = changes;_i < changes_1.length; _i++) {
          var change = changes_1[_i];
          if (FullTextDocument2.isIncremental(change)) {
            var range = getWellformedRange(change.range);
            var startOffset = this.offsetAt(range.start);
            var endOffset = this.offsetAt(range.end);
            this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
            var startLine = Math.max(range.start.line, 0);
            var endLine = Math.max(range.end.line, 0);
            var lineOffsets = this._lineOffsets;
            var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
            if (endLine - startLine === addedLineOffsets.length) {
              for (var i = 0, len = addedLineOffsets.length;i < len; i++) {
                lineOffsets[i + startLine + 1] = addedLineOffsets[i];
              }
            } else {
              if (addedLineOffsets.length < 1e4) {
                lineOffsets.splice.apply(lineOffsets, __spreadArray([startLine + 1, endLine - startLine], addedLineOffsets, false));
              } else {
                this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
              }
            }
            var diff = change.text.length - (endOffset - startOffset);
            if (diff !== 0) {
              for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length;i < len; i++) {
                lineOffsets[i] = lineOffsets[i] + diff;
              }
            }
          } else if (FullTextDocument2.isFull(change)) {
            this._content = change.text;
            this._lineOffsets = undefined;
          } else {
            throw new Error("Unknown change event received");
          }
        }
        this._version = version;
      };
      FullTextDocument2.prototype.getLineOffsets = function() {
        if (this._lineOffsets === undefined) {
          this._lineOffsets = computeLineOffsets(this._content, true);
        }
        return this._lineOffsets;
      };
      FullTextDocument2.prototype.positionAt = function(offset) {
        offset = Math.max(Math.min(offset, this._content.length), 0);
        var lineOffsets = this.getLineOffsets();
        var low = 0, high = lineOffsets.length;
        if (high === 0) {
          return { line: 0, character: offset };
        }
        while (low < high) {
          var mid = Math.floor((low + high) / 2);
          if (lineOffsets[mid] > offset) {
            high = mid;
          } else {
            low = mid + 1;
          }
        }
        var line = low - 1;
        offset = this.ensureBeforeEOL(offset, lineOffsets[line]);
        return { line, character: offset - lineOffsets[line] };
      };
      FullTextDocument2.prototype.offsetAt = function(position) {
        var lineOffsets = this.getLineOffsets();
        if (position.line >= lineOffsets.length) {
          return this._content.length;
        } else if (position.line < 0) {
          return 0;
        }
        var lineOffset = lineOffsets[position.line];
        if (position.character <= 0) {
          return lineOffset;
        }
        var nextLineOffset = position.line + 1 < lineOffsets.length ? lineOffsets[position.line + 1] : this._content.length;
        var offset = Math.min(lineOffset + position.character, nextLineOffset);
        return this.ensureBeforeEOL(offset, lineOffset);
      };
      FullTextDocument2.prototype.getLineRange = function(line) {
        var lineOffsets = this.getLineOffsets();
        if (line >= lineOffsets.length) {
          var lastLine = lineOffsets.length - 1;
          return { start: { line: lastLine, character: 0 }, end: { line: lastLine, character: this._content.length - lineOffsets[lastLine] } };
        } else if (line < 0) {
          return { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } };
        }
        var startOffset = lineOffsets[line];
        var nextLineOffset = line + 1 < lineOffsets.length ? lineOffsets[line + 1] : this._content.length;
        var endOffset = this.ensureBeforeEOL(nextLineOffset, startOffset);
        return { start: { line, character: 0 }, end: { line, character: endOffset - startOffset } };
      };
      FullTextDocument2.prototype.getEOLCharacters = function(line) {
        var lineOffsets = this.getLineOffsets();
        if (line >= lineOffsets.length) {
          return "";
        } else if (line < 0) {
          return "";
        }
        var nextLineOffset = line + 1 < lineOffsets.length ? lineOffsets[line + 1] : this._content.length;
        var eolOffset = this.ensureBeforeEOL(nextLineOffset, lineOffsets[line]);
        return this._content.substring(eolOffset, nextLineOffset);
      };
      FullTextDocument2.prototype.ensureBeforeEOL = function(offset, lineOffset) {
        while (offset > lineOffset && isEOL(this._content.charCodeAt(offset - 1))) {
          offset--;
        }
        return offset;
      };
      Object.defineProperty(FullTextDocument2.prototype, "lineCount", {
        get: function() {
          return this.getLineOffsets().length;
        },
        enumerable: false,
        configurable: true
      });
      FullTextDocument2.isIncremental = function(event) {
        var candidate = event;
        return candidate !== undefined && candidate !== null && typeof candidate.text === "string" && candidate.range !== undefined && (candidate.rangeLength === undefined || typeof candidate.rangeLength === "number");
      };
      FullTextDocument2.isFull = function(event) {
        var candidate = event;
        return candidate !== undefined && candidate !== null && typeof candidate.text === "string" && candidate.range === undefined && candidate.rangeLength === undefined;
      };
      return FullTextDocument2;
    }();
    var TextDocument;
    (function(TextDocument2) {
      function create(uri, languageId, version, content) {
        return new FullTextDocument(uri, languageId, version, content);
      }
      TextDocument2.create = create;
      function update(document, changes, version) {
        if (document instanceof FullTextDocument) {
          document.update(changes, version);
          return document;
        } else {
          throw new Error("TextDocument.update: document must be created by TextDocument.create");
        }
      }
      TextDocument2.update = update;
      function applyEdits(document, edits) {
        var text = document.getText();
        var sortedEdits = mergeSort(edits.map(getWellformedEdit), function(a, b) {
          var diff = a.range.start.line - b.range.start.line;
          if (diff === 0) {
            return a.range.start.character - b.range.start.character;
          }
          return diff;
        });
        var lastModifiedOffset = 0;
        var spans = [];
        for (var _i = 0, sortedEdits_1 = sortedEdits;_i < sortedEdits_1.length; _i++) {
          var e = sortedEdits_1[_i];
          var startOffset = document.offsetAt(e.range.start);
          if (startOffset < lastModifiedOffset) {
            throw new Error("Overlapping edit");
          } else if (startOffset > lastModifiedOffset) {
            spans.push(text.substring(lastModifiedOffset, startOffset));
          }
          if (e.newText.length) {
            spans.push(e.newText);
          }
          lastModifiedOffset = document.offsetAt(e.range.end);
        }
        spans.push(text.substr(lastModifiedOffset));
        return spans.join("");
      }
      TextDocument2.applyEdits = applyEdits;
    })(TextDocument || (exports3.TextDocument = TextDocument = {}));
    function mergeSort(data, compare) {
      if (data.length <= 1) {
        return data;
      }
      var p = data.length / 2 | 0;
      var left = data.slice(0, p);
      var right = data.slice(p);
      mergeSort(left, compare);
      mergeSort(right, compare);
      var leftIdx = 0;
      var rightIdx = 0;
      var i = 0;
      while (leftIdx < left.length && rightIdx < right.length) {
        var ret = compare(left[leftIdx], right[rightIdx]);
        if (ret <= 0) {
          data[i++] = left[leftIdx++];
        } else {
          data[i++] = right[rightIdx++];
        }
      }
      while (leftIdx < left.length) {
        data[i++] = left[leftIdx++];
      }
      while (rightIdx < right.length) {
        data[i++] = right[rightIdx++];
      }
      return data;
    }
    function computeLineOffsets(text, isAtLineStart, textOffset) {
      if (textOffset === undefined) {
        textOffset = 0;
      }
      var result = isAtLineStart ? [textOffset] : [];
      for (var i = 0;i < text.length; i++) {
        var ch = text.charCodeAt(i);
        if (isEOL(ch)) {
          if (ch === 13 && i + 1 < text.length && text.charCodeAt(i + 1) === 10) {
            i++;
          }
          result.push(textOffset + i + 1);
        }
      }
      return result;
    }
    function isEOL(char) {
      return char === 13 || char === 10;
    }
    function getWellformedRange(range) {
      var start = range.start;
      var end = range.end;
      if (start.line > end.line || start.line === end.line && start.character > end.character) {
        return { start: end, end: start };
      }
      return range;
    }
    function getWellformedEdit(textEdit) {
      var range = getWellformedRange(textEdit.range);
      if (range !== textEdit.range) {
        return { newText: textEdit.newText, range };
      }
      return textEdit;
    }
  });
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/textSynchronization.js
var require_textSynchronization = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DidSaveTextDocumentFeature = exports2.WillSaveWaitUntilFeature = exports2.WillSaveFeature = exports2.DidChangeTextDocumentFeature = exports2.DidCloseTextDocumentFeature = exports2.DidOpenTextDocumentFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());
  var vscode_languageserver_textdocument_1 = require_main2();

  class DidOpenTextDocumentFeature extends features_1.TextDocumentEventFeature {
    _syncedDocuments;
    _pendingOpenNotifications;
    _delayOpen;
    _pendingOpenListeners;
    constructor(client, syncedDocuments) {
      super(client, vscode_1.workspace.onDidOpenTextDocument, vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, () => client.middleware.didOpen, (textDocument) => client.code2ProtocolConverter.asOpenTextDocumentParams(textDocument), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);
      this._syncedDocuments = syncedDocuments;
      this._pendingOpenNotifications = new Map;
      this._delayOpen = client.clientOptions.textSynchronization?.delayOpenNotifications ?? false;
    }
    async callback(document) {
      if (!this._delayOpen) {
        return super.callback(document);
      } else {
        if (!this.matches(document)) {
          return;
        }
        const visibleDocuments = this._client.visibleDocuments;
        if (visibleDocuments.isVisible(document)) {
          return super.callback(document);
        } else {
          const snapshot = new TextDocumentSnapshot(document);
          this._pendingOpenNotifications.set(snapshot.uri.toString(), snapshot);
        }
      }
    }
    get openDocuments() {
      return this._syncedDocuments.values();
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
        this.register({ id: UUID.generateUuid(), registerOptions: { documentSelector } });
      }
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type;
    }
    register(data) {
      super.register(data);
      if (!data.registerOptions.documentSelector) {
        return;
      }
      const documentSelector = this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector);
      vscode_1.workspace.textDocuments.forEach((textDocument) => {
        const uri = textDocument.uri.toString();
        if (this._syncedDocuments.has(uri)) {
          return;
        }
        if (vscode_1.languages.match(documentSelector, textDocument) > 0 && !this._client.hasDedicatedTextSynchronizationFeature(textDocument)) {
          const visibleDocuments = this._client.visibleDocuments;
          if (visibleDocuments.isVisible(textDocument)) {
            const middleware = this._client.middleware;
            const didOpen = (textDocument2) => {
              return this._client.sendNotification(this._type, this._createParams(textDocument2));
            };
            (middleware.didOpen ? middleware.didOpen(textDocument, didOpen) : didOpen(textDocument)).catch((error) => {
              this._client.error(`Sending document notification ${this._type.method} failed`, error);
            });
            this._syncedDocuments.set(uri, textDocument);
          } else {
            this._pendingOpenNotifications.set(uri, textDocument);
          }
        }
      });
      if (this._delayOpen && this._pendingOpenListeners === undefined) {
        this._pendingOpenListeners = [];
        const visibleDocuments = this._client.visibleDocuments;
        this._pendingOpenListeners.push(visibleDocuments.onClose((closed) => {
          for (const uri of closed) {
            this._pendingOpenNotifications.delete(uri.toString());
          }
        }));
        this._pendingOpenListeners.push(visibleDocuments.onOpen((opened) => {
          for (const uri of opened) {
            const document = this._pendingOpenNotifications.get(uri.toString());
            if (document !== undefined) {
              super.callback(document).catch((error) => {
                this._client.error(`Sending document notification ${this._type.method} failed`, error);
              });
              this._pendingOpenNotifications.delete(uri.toString());
            }
          }
        }));
        this._pendingOpenListeners.push(vscode_1.workspace.onDidCloseTextDocument((document) => {
          this._pendingOpenNotifications.delete(document.uri.toString());
        }));
      }
    }
    async sendPendingOpenNotifications(closingDocument) {
      const notifications = Array.from(this._pendingOpenNotifications.values());
      this._pendingOpenNotifications.clear();
      let didDropOpenNotification = false;
      for (const notification of notifications) {
        if (closingDocument !== undefined && notification.uri.toString() === closingDocument) {
          didDropOpenNotification = true;
          continue;
        }
        await super.callback(notification);
      }
      return didDropOpenNotification;
    }
    getTextDocument(data) {
      return data;
    }
    notificationSent(textDocument, type, params) {
      this._syncedDocuments.set(textDocument.uri.toString(), textDocument);
      super.notificationSent(textDocument, type, params);
    }
    clear() {
      this._pendingOpenNotifications.clear();
      if (this._pendingOpenListeners !== undefined) {
        for (const listener of this._pendingOpenListeners) {
          listener.dispose();
        }
        this._pendingOpenListeners = undefined;
      }
      super.clear();
    }
  }
  exports2.DidOpenTextDocumentFeature = DidOpenTextDocumentFeature;

  class DidCloseTextDocumentFeature extends features_1.TextDocumentEventFeature {
    _syncedDocuments;
    _pendingTextDocumentChanges;
    constructor(client, syncedDocuments, pendingTextDocumentChanges) {
      super(client, vscode_1.workspace.onDidCloseTextDocument, vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, () => client.middleware.didClose, (textDocument) => client.code2ProtocolConverter.asCloseTextDocumentParams(textDocument), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);
      this._syncedDocuments = syncedDocuments;
      this._pendingTextDocumentChanges = pendingTextDocumentChanges;
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.openClose) {
        this.register({ id: UUID.generateUuid(), registerOptions: { documentSelector } });
      }
    }
    async callback(data) {
      await super.callback(data);
      this._pendingTextDocumentChanges.delete(data.uri.toString());
    }
    getTextDocument(data) {
      return data;
    }
    notificationSent(textDocument, type, params) {
      this._syncedDocuments.delete(textDocument.uri.toString());
      super.notificationSent(textDocument, type, params);
    }
    unregister(id) {
      const selector = this._selectors.get(id);
      if (selector === undefined) {
        return;
      }
      super.unregister(id);
      const selectors = this._selectors.values();
      this._syncedDocuments.forEach((textDocument) => {
        if (vscode_1.languages.match(selector, textDocument) > 0 && !this._selectorFilter(selectors, textDocument) && !this._client.hasDedicatedTextSynchronizationFeature(textDocument)) {
          const middleware = this._client.middleware;
          const didClose = (textDocument2) => {
            return this._client.sendNotification(this._type, this._createParams(textDocument2));
          };
          this._syncedDocuments.delete(textDocument.uri.toString());
          (middleware.didClose ? middleware.didClose(textDocument, didClose) : didClose(textDocument)).catch((error) => {
            this._client.error(`Sending document notification ${this._type.method} failed`, error);
          });
        }
      });
    }
  }
  exports2.DidCloseTextDocumentFeature = DidCloseTextDocumentFeature;

  class DidChangeTextDocumentFeature extends features_1.DynamicDocumentFeature {
    _listener;
    _changeData;
    _onAboutToSendNotification;
    _onNotificationSent;
    _onPendingChangeAdded;
    _pendingTextDocumentChanges;
    _syncKind;
    constructor(client, pendingTextDocumentChanges) {
      super(client);
      this._changeData = new Map;
      this._onAboutToSendNotification = new vscode_1.EventEmitter;
      this._onNotificationSent = new vscode_1.EventEmitter;
      this._onPendingChangeAdded = new vscode_1.EventEmitter;
      this._pendingTextDocumentChanges = pendingTextDocumentChanges;
      this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
    }
    get onAboutToSendNotification() {
      return this._onAboutToSendNotification.event;
    }
    get onNotificationSent() {
      return this._onNotificationSent.event;
    }
    get onPendingChangeAdded() {
      return this._onPendingChangeAdded.event;
    }
    get syncKind() {
      return this._syncKind;
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.change !== undefined && textDocumentSyncOptions.change !== vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
        this.register({
          id: UUID.generateUuid(),
          registerOptions: Object.assign({}, { documentSelector }, { syncKind: textDocumentSyncOptions.change })
        });
      }
    }
    register(data) {
      if (!data.registerOptions.documentSelector) {
        return;
      }
      if (!this._listener) {
        this._listener = vscode_1.workspace.onDidChangeTextDocument(this.callback, this);
      }
      this._changeData.set(data.id, {
        syncKind: data.registerOptions.syncKind,
        documentSelector: this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector)
      });
      this.updateSyncKind(data.registerOptions.syncKind);
    }
    *getDocumentSelectors() {
      for (const data of this._changeData.values()) {
        yield data.documentSelector;
      }
    }
    async callback(event) {
      if (event.contentChanges.length === 0) {
        return;
      }
      const uri = event.document.uri;
      const version = event.document.version;
      const promises = [];
      for (const changeData of this._changeData.values()) {
        if (vscode_1.languages.match(changeData.documentSelector, event.document) > 0 && !this._client.hasDedicatedTextSynchronizationFeature(event.document)) {
          const middleware = this._client.middleware;
          if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental) {
            const didChange = async (event2) => {
              const params = this._client.code2ProtocolConverter.asChangeTextDocumentParams(event2, uri, version);
              this.aboutToSendNotification(event2.document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
              await this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
              this.notificationSent(event2.document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
            };
            promises.push(middleware.didChange ? middleware.didChange(event, (event2) => didChange(event2)) : didChange(event));
          } else if (changeData.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
            const didChange = async (event2) => {
              const eventUri = event2.document.uri.toString();
              this._pendingTextDocumentChanges.set(eventUri, event2.document);
              this._onPendingChangeAdded.fire();
            };
            promises.push(middleware.didChange ? middleware.didChange(event, (event2) => didChange(event2)) : didChange(event));
          }
        }
      }
      return Promise.all(promises).then(undefined, (error) => {
        this._client.error(`Sending document notification ${vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type.method} failed`, error);
        throw error;
      });
    }
    aboutToSendNotification(textDocument, type, params) {
      this._onAboutToSendNotification.fire({ textDocument, type, params });
    }
    notificationSent(textDocument, type, params) {
      this._onNotificationSent.fire({ textDocument, type, params });
    }
    unregister(id) {
      this._changeData.delete(id);
      if (this._changeData.size === 0) {
        if (this._listener) {
          this._listener.dispose();
          this._listener = undefined;
        }
        this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
      } else {
        this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
        for (const changeData of this._changeData.values()) {
          this.updateSyncKind(changeData.syncKind);
          if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
            break;
          }
        }
      }
    }
    clear() {
      this._pendingTextDocumentChanges.clear();
      this._changeData.clear();
      this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
      if (this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    getPendingDocumentChanges(excludes) {
      if (this._pendingTextDocumentChanges.size === 0) {
        return [];
      }
      let result;
      if (excludes.size === 0) {
        result = Array.from(this._pendingTextDocumentChanges.values());
        this._pendingTextDocumentChanges.clear();
      } else {
        result = [];
        for (const entry of this._pendingTextDocumentChanges) {
          if (!excludes.has(entry[0])) {
            result.push(entry[1]);
            this._pendingTextDocumentChanges.delete(entry[0]);
          }
        }
      }
      return result;
    }
    getProvider(document) {
      for (const changeData of this._changeData.values()) {
        if (vscode_1.languages.match(changeData.documentSelector, document) > 0) {
          return {
            send: (event) => {
              return this.callback(event);
            }
          };
        }
      }
      return;
    }
    updateSyncKind(syncKind) {
      if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
        return;
      }
      switch (syncKind) {
        case vscode_languageserver_protocol_1.TextDocumentSyncKind.Full:
          this._syncKind = syncKind;
          break;
        case vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental:
          if (this._syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
            this._syncKind = vscode_languageserver_protocol_1.TextDocumentSyncKind.Incremental;
          }
          break;
      }
    }
  }
  exports2.DidChangeTextDocumentFeature = DidChangeTextDocumentFeature;

  class WillSaveFeature extends features_1.TextDocumentEventFeature {
    constructor(client) {
      super(client, vscode_1.workspace.onWillSaveTextDocument, vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, () => client.middleware.willSave, (willSaveEvent) => client.code2ProtocolConverter.asWillSaveTextDocumentParams(willSaveEvent), (event) => event.document, (selectors, willSaveEvent) => features_1.TextDocumentEventFeature.textDocumentFilter(selectors, willSaveEvent.document));
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type;
    }
    fillClientCapabilities(capabilities) {
      const value = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization");
      value.willSave = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSave) {
        this.register({
          id: UUID.generateUuid(),
          registerOptions: { documentSelector }
        });
      }
    }
    getTextDocument(data) {
      return data.document;
    }
  }
  exports2.WillSaveFeature = WillSaveFeature;

  class WillSaveWaitUntilFeature extends features_1.DynamicDocumentFeature {
    _listener;
    _selectors;
    constructor(client) {
      super(client);
      this._selectors = new Map;
    }
    getDocumentSelectors() {
      return this._selectors.values();
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type;
    }
    fillClientCapabilities(capabilities) {
      const value = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization");
      value.willSaveWaitUntil = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.willSaveWaitUntil) {
        this.register({
          id: UUID.generateUuid(),
          registerOptions: { documentSelector }
        });
      }
    }
    register(data) {
      if (!data.registerOptions.documentSelector) {
        return;
      }
      if (!this._listener) {
        this._listener = vscode_1.workspace.onWillSaveTextDocument(this.callback, this);
      }
      this._selectors.set(data.id, this._client.protocol2CodeConverter.asDocumentSelector(data.registerOptions.documentSelector));
    }
    callback(event) {
      if (features_1.TextDocumentEventFeature.textDocumentFilter(this._selectors.values(), event.document) && !this._client.hasDedicatedTextSynchronizationFeature(event.document)) {
        const middleware = this._client.middleware;
        const willSaveWaitUntil = (event2) => {
          return this._client.sendRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, this._client.code2ProtocolConverter.asWillSaveTextDocumentParams(event2)).then(async (edits) => {
            const vEdits = await this._client.protocol2CodeConverter.asTextEdits(edits);
            return vEdits === undefined ? [] : vEdits;
          });
        };
        event.waitUntil(middleware.willSaveWaitUntil ? middleware.willSaveWaitUntil(event, willSaveWaitUntil) : willSaveWaitUntil(event));
      }
    }
    unregister(id) {
      this._selectors.delete(id);
      if (this._selectors.size === 0 && this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    clear() {
      this._selectors.clear();
      if (this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
  }
  exports2.WillSaveWaitUntilFeature = WillSaveWaitUntilFeature;

  class DidSaveTextDocumentFeature extends features_1.TextDocumentEventFeature {
    _includeText;
    constructor(client) {
      super(client, vscode_1.workspace.onDidSaveTextDocument, vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, () => client.middleware.didSave, (textDocument) => client.code2ProtocolConverter.asSaveTextDocumentParams(textDocument, this._includeText), (data) => data, features_1.TextDocumentEventFeature.textDocumentFilter);
      this._includeText = false;
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "synchronization").didSave = true;
    }
    initialize(capabilities, documentSelector) {
      const textDocumentSyncOptions = capabilities.resolvedTextDocumentSync;
      if (documentSelector && textDocumentSyncOptions && textDocumentSyncOptions.save) {
        const saveOptions = typeof textDocumentSyncOptions.save === "boolean" ? { includeText: false } : { includeText: !!textDocumentSyncOptions.save.includeText };
        this.register({
          id: UUID.generateUuid(),
          registerOptions: Object.assign({}, { documentSelector }, saveOptions)
        });
      }
    }
    register(data) {
      this._includeText = !!data.registerOptions.includeText;
      super.register(data);
    }
    getTextDocument(data) {
      return data;
    }
  }
  exports2.DidSaveTextDocumentFeature = DidSaveTextDocumentFeature;
  var USUAL_WORD_SEPARATORS = "`~!@#$%^&*()-=+[{]}\\|;:'\",.<>/?";
  function createWordRegExp(allowInWords = "") {
    let source = "(-?\\d*\\.\\d\\w*)|([^";
    for (const sep of USUAL_WORD_SEPARATORS) {
      if (allowInWords.indexOf(sep) >= 0) {
        continue;
      }
      source += "\\" + sep;
    }
    source += "\\s]+)";
    return new RegExp(source, "g");
  }
  var DEFAULT_WORD_REGEXP = createWordRegExp();

  class TextDocumentSnapshot {
    _extTextDocument;
    _capturedTextDocument;
    _content;
    _uri;
    _fileName;
    _languageId;
    _version;
    _eol;
    _isUntitled;
    _encoding;
    _isDirty;
    _isClosed;
    constructor(textDocument) {
      this._extTextDocument = textDocument;
      this._content = textDocument.getText();
      this._uri = textDocument.uri;
      this._fileName = textDocument.fileName;
      this._languageId = textDocument.languageId;
      this._version = textDocument.version;
      this._eol = textDocument.eol;
      this._isUntitled = textDocument.isUntitled;
      this._encoding = textDocument.encoding;
      this._isDirty = textDocument.isDirty;
      this._isClosed = textDocument.isClosed;
      this._capturedTextDocument = vscode_languageserver_textdocument_1.TextDocument.create(this._uri.toString(), this._languageId, this._version, this._content);
    }
    get uri() {
      return this._uri;
    }
    get languageId() {
      return this._languageId;
    }
    get version() {
      return this._version;
    }
    get eol() {
      return this._eol;
    }
    get isUntitled() {
      return this._isUntitled;
    }
    get encoding() {
      return this._encoding;
    }
    get fileName() {
      return this._fileName;
    }
    get isDirty() {
      return this._isDirty;
    }
    get isClosed() {
      return this._isClosed;
    }
    save() {
      return this.version === this._extTextDocument.version ? this._extTextDocument.save() : Promise.resolve(false);
    }
    get lineCount() {
      return this._capturedTextDocument.lineCount;
    }
    offsetAt(position) {
      return this._capturedTextDocument.offsetAt(position);
    }
    positionAt(offset) {
      const position = this._capturedTextDocument.positionAt(offset);
      return new vscode_1.Position(position.line, position.character);
    }
    getText(range) {
      return this._capturedTextDocument.getText(range);
    }
    lineAt(lineOrPosition) {
      const line = typeof lineOrPosition === "number" ? lineOrPosition : this.validatePosition(lineOrPosition).line;
      if (line < 0 || line >= this.lineCount) {
        throw new RangeError(`Illegal value for line: ${line}`);
      }
      const lineRange = this._capturedTextDocument.getLineRange(line);
      const text = this._capturedTextDocument.getText(lineRange);
      const firstNonWhitespaceCharacterIndex = text.search(/\S/);
      const range = new vscode_1.Range(lineRange.start.line, lineRange.start.character, lineRange.end.line, lineRange.end.character);
      const rangeIncludingLineBreak = line + 1 < this.lineCount ? new vscode_1.Range(range.start.line, range.start.character, line + 1, 0) : range;
      return {
        lineNumber: line,
        text,
        range,
        rangeIncludingLineBreak,
        firstNonWhitespaceCharacterIndex: firstNonWhitespaceCharacterIndex === -1 ? text.length : firstNonWhitespaceCharacterIndex,
        isEmptyOrWhitespace: firstNonWhitespaceCharacterIndex === -1
      };
    }
    getWordRangeAtPosition(position, regex) {
      const lineNumber = this.validatePosition(position).line;
      const lineText = this.lineAt(lineNumber).text;
      const wordRegex = TextDocumentSnapshot.getWordRegExp(regex);
      let match;
      wordRegex.lastIndex = 0;
      while ((match = wordRegex.exec(lineText)) !== null) {
        if (match.index <= position.character && wordRegex.lastIndex >= position.character) {
          return new vscode_1.Range(lineNumber, match.index, lineNumber, wordRegex.lastIndex);
        }
      }
      return;
    }
    validateRange(range) {
      const start = this.validatePosition(range.start);
      const end = this.validatePosition(range.end);
      if (start === range.start && end === range.end) {
        return range;
      }
      return new vscode_1.Range(start.line, start.character, end.line, end.character);
    }
    validatePosition(position) {
      const line = Math.min(Math.max(position.line, 0), this.lineCount - 1);
      const lineRange = this._capturedTextDocument.getLineRange(line);
      const character = Math.min(Math.max(position.character, 0), lineRange.end.character);
      if (line === position.line && character === position.character) {
        return position;
      }
      return new vscode_1.Position(line, character);
    }
    static getWordRegExp(regex) {
      const result = regex ?? DEFAULT_WORD_REGEXP;
      if (result.flags.includes("g")) {
        return result;
      }
      const flags = `${result.flags}g`;
      return new RegExp(result.source, flags);
    }
  }
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/completion.js
var require_completion = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CompletionItemFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());
  var SupportedCompletionItemKinds = [
    vscode_languageserver_protocol_1.CompletionItemKind.Text,
    vscode_languageserver_protocol_1.CompletionItemKind.Method,
    vscode_languageserver_protocol_1.CompletionItemKind.Function,
    vscode_languageserver_protocol_1.CompletionItemKind.Constructor,
    vscode_languageserver_protocol_1.CompletionItemKind.Field,
    vscode_languageserver_protocol_1.CompletionItemKind.Variable,
    vscode_languageserver_protocol_1.CompletionItemKind.Class,
    vscode_languageserver_protocol_1.CompletionItemKind.Interface,
    vscode_languageserver_protocol_1.CompletionItemKind.Module,
    vscode_languageserver_protocol_1.CompletionItemKind.Property,
    vscode_languageserver_protocol_1.CompletionItemKind.Unit,
    vscode_languageserver_protocol_1.CompletionItemKind.Value,
    vscode_languageserver_protocol_1.CompletionItemKind.Enum,
    vscode_languageserver_protocol_1.CompletionItemKind.Keyword,
    vscode_languageserver_protocol_1.CompletionItemKind.Snippet,
    vscode_languageserver_protocol_1.CompletionItemKind.Color,
    vscode_languageserver_protocol_1.CompletionItemKind.File,
    vscode_languageserver_protocol_1.CompletionItemKind.Reference,
    vscode_languageserver_protocol_1.CompletionItemKind.Folder,
    vscode_languageserver_protocol_1.CompletionItemKind.EnumMember,
    vscode_languageserver_protocol_1.CompletionItemKind.Constant,
    vscode_languageserver_protocol_1.CompletionItemKind.Struct,
    vscode_languageserver_protocol_1.CompletionItemKind.Event,
    vscode_languageserver_protocol_1.CompletionItemKind.Operator,
    vscode_languageserver_protocol_1.CompletionItemKind.TypeParameter
  ];

  class CompletionItemFeature extends features_1.TextDocumentLanguageFeature {
    labelDetailsSupport;
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.CompletionRequest.type);
      this.labelDetailsSupport = new Map;
    }
    fillClientCapabilities(capabilities) {
      const completion = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "completion");
      completion.dynamicRegistration = true;
      completion.contextSupport = true;
      completion.completionItem = {
        snippetSupport: true,
        commitCharactersSupport: true,
        documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText],
        deprecatedSupport: true,
        preselectSupport: true,
        tagSupport: { valueSet: [vscode_languageserver_protocol_1.CompletionItemTag.Deprecated] },
        insertReplaceSupport: true,
        resolveSupport: {
          properties: ["documentation", "detail", "additionalTextEdits"]
        },
        insertTextModeSupport: { valueSet: [vscode_languageserver_protocol_1.InsertTextMode.asIs, vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation] },
        labelDetailsSupport: true
      };
      completion.insertTextMode = vscode_languageserver_protocol_1.InsertTextMode.adjustIndentation;
      completion.completionItemKind = { valueSet: SupportedCompletionItemKinds };
      completion.completionList = {
        itemDefaults: [
          "commitCharacters",
          "editRange",
          "insertTextFormat",
          "insertTextMode",
          "data"
        ],
        applyKindSupport: true
      };
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.completionProvider);
      if (!options) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: options
      });
    }
    registerLanguageProvider(options, id) {
      this.labelDetailsSupport.set(id, !!options.completionItem?.labelDetailsSupport);
      const triggerCharacters = options.triggerCharacters ?? [];
      const defaultCommitCharacters = options.allCommitCharacters;
      const selector = options.documentSelector;
      const provider = {
        provideCompletionItems: (document, position, token, context) => {
          const client = this._client;
          const middleware = this._client.middleware;
          const provideCompletionItems = (document2, position2, context2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.CompletionRequest.type, client.code2ProtocolConverter.asCompletionParams(document2, position2, context2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asCompletionResult(result, defaultCommitCharacters, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CompletionRequest.type, token2, error, null);
            });
          };
          return middleware.provideCompletionItem ? middleware.provideCompletionItem(document, position, context, token, provideCompletionItems) : provideCompletionItems(document, position, context, token);
        },
        resolveCompletionItem: options.resolveProvider ? (item, token) => {
          const client = this._client;
          const middleware = this._client.middleware;
          const resolveCompletionItem = (item2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, client.code2ProtocolConverter.asCompletionItem(item2, !!this.labelDetailsSupport.get(id)), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asCompletionItem(result);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, token2, error, item2);
            });
          };
          return middleware.resolveCompletionItem ? middleware.resolveCompletionItem(item, token, resolveCompletionItem) : resolveCompletionItem(item, token);
        } : undefined
      };
      return [vscode_1.languages.registerCompletionItemProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, ...triggerCharacters), provider];
    }
  }
  exports2.CompletionItemFeature = CompletionItemFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/hover.js
var require_hover = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.HoverFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class HoverFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.HoverRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const hoverCapability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "hover");
      hoverCapability.dynamicRegistration = true;
      hoverCapability.contentFormat = [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText];
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.hoverProvider);
      if (!options) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: options
      });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideHover: (document, position, token) => {
          const client = this._client;
          const provideHover = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.HoverRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asHover(result);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.HoverRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideHover ? middleware.provideHover(document, position, token, provideHover) : provideHover(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerHoverProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.HoverFeature = HoverFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/definition.js
var require_definition = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DefinitionFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class DefinitionFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DefinitionRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const definitionSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "definition");
      definitionSupport.dynamicRegistration = true;
      definitionSupport.linkSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.definitionProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDefinition: (document, position, token) => {
          const client = this._client;
          const provideDefinition = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDefinitionResult(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDefinition ? middleware.provideDefinition(document, position, token, provideDefinition) : provideDefinition(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerDefinitionProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.DefinitionFeature = DefinitionFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/signatureHelp.js
var require_signatureHelp = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SignatureHelpFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class SignatureHelpFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.SignatureHelpRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const config = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "signatureHelp");
      config.dynamicRegistration = true;
      config.signatureInformation = { documentationFormat: [vscode_languageserver_protocol_1.MarkupKind.Markdown, vscode_languageserver_protocol_1.MarkupKind.PlainText] };
      config.signatureInformation.parameterInformation = { labelOffsetSupport: true };
      config.signatureInformation.activeParameterSupport = true;
      config.signatureInformation.noActiveParameterSupport = true;
      config.contextSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.signatureHelpProvider);
      if (!options) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: options
      });
    }
    registerLanguageProvider(options) {
      const provider = {
        provideSignatureHelp: (document, position, token, context) => {
          const client = this._client;
          const providerSignatureHelp = (document2, position2, context2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, client.code2ProtocolConverter.asSignatureHelpParams(document2, position2, context2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asSignatureHelp(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideSignatureHelp ? middleware.provideSignatureHelp(document, position, context, token, providerSignatureHelp) : providerSignatureHelp(document, position, context, token);
        }
      };
      return [this.registerProvider(options, provider), provider];
    }
    registerProvider(options, provider) {
      const selector = this._client.protocol2CodeConverter.asDocumentSelector(options.documentSelector);
      if (options.retriggerCharacters === undefined) {
        const triggerCharacters = options.triggerCharacters || [];
        return vscode_1.languages.registerSignatureHelpProvider(selector, provider, ...triggerCharacters);
      } else {
        const metaData = {
          triggerCharacters: options.triggerCharacters || [],
          retriggerCharacters: options.retriggerCharacters || []
        };
        return vscode_1.languages.registerSignatureHelpProvider(selector, provider, metaData);
      }
    }
  }
  exports2.SignatureHelpFeature = SignatureHelpFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/documentHighlight.js
var require_documentHighlight = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DocumentHighlightFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class DocumentHighlightFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentHighlightRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "documentHighlight").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentHighlightProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDocumentHighlights: (document, position, token) => {
          const client = this._client;
          const _provideDocumentHighlights = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDocumentHighlights(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentHighlights ? middleware.provideDocumentHighlights(document, position, token, _provideDocumentHighlights) : _provideDocumentHighlights(document, position, token);
        }
      };
      return [vscode_1.languages.registerDocumentHighlightProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.DocumentHighlightFeature = DocumentHighlightFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/documentSymbol.js
var require_documentSymbol = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DocumentSymbolFeature = exports2.SupportedSymbolTags = exports2.SupportedSymbolKinds = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());
  exports2.SupportedSymbolKinds = [
    vscode_languageserver_protocol_1.SymbolKind.File,
    vscode_languageserver_protocol_1.SymbolKind.Module,
    vscode_languageserver_protocol_1.SymbolKind.Namespace,
    vscode_languageserver_protocol_1.SymbolKind.Package,
    vscode_languageserver_protocol_1.SymbolKind.Class,
    vscode_languageserver_protocol_1.SymbolKind.Method,
    vscode_languageserver_protocol_1.SymbolKind.Property,
    vscode_languageserver_protocol_1.SymbolKind.Field,
    vscode_languageserver_protocol_1.SymbolKind.Constructor,
    vscode_languageserver_protocol_1.SymbolKind.Enum,
    vscode_languageserver_protocol_1.SymbolKind.Interface,
    vscode_languageserver_protocol_1.SymbolKind.Function,
    vscode_languageserver_protocol_1.SymbolKind.Variable,
    vscode_languageserver_protocol_1.SymbolKind.Constant,
    vscode_languageserver_protocol_1.SymbolKind.String,
    vscode_languageserver_protocol_1.SymbolKind.Number,
    vscode_languageserver_protocol_1.SymbolKind.Boolean,
    vscode_languageserver_protocol_1.SymbolKind.Array,
    vscode_languageserver_protocol_1.SymbolKind.Object,
    vscode_languageserver_protocol_1.SymbolKind.Key,
    vscode_languageserver_protocol_1.SymbolKind.Null,
    vscode_languageserver_protocol_1.SymbolKind.EnumMember,
    vscode_languageserver_protocol_1.SymbolKind.Struct,
    vscode_languageserver_protocol_1.SymbolKind.Event,
    vscode_languageserver_protocol_1.SymbolKind.Operator,
    vscode_languageserver_protocol_1.SymbolKind.TypeParameter
  ];
  exports2.SupportedSymbolTags = [
    vscode_languageserver_protocol_1.SymbolTag.Deprecated
  ];

  class DocumentSymbolFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentSymbolRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const symbolCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "documentSymbol");
      symbolCapabilities.dynamicRegistration = true;
      symbolCapabilities.symbolKind = {
        valueSet: exports2.SupportedSymbolKinds
      };
      symbolCapabilities.hierarchicalDocumentSymbolSupport = true;
      symbolCapabilities.tagSupport = {
        valueSet: exports2.SupportedSymbolTags
      };
      symbolCapabilities.labelSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentSymbolProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDocumentSymbols: (document, token) => {
          const client = this._client;
          const _provideDocumentSymbols = async (document2, token2) => {
            try {
              const data = await client.sendRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, client.code2ProtocolConverter.asDocumentSymbolParams(document2), token2);
              if (token2.isCancellationRequested || data === undefined || data === null) {
                return null;
              }
              if (data.length === 0) {
                return [];
              } else {
                const first = data[0];
                if (vscode_languageserver_protocol_1.DocumentSymbol.is(first)) {
                  return await client.protocol2CodeConverter.asDocumentSymbols(data, token2);
                } else {
                  return await client.protocol2CodeConverter.asSymbolInformations(data, token2);
                }
              }
            } catch (error) {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, token2, error, null);
            }
          };
          const middleware = client.middleware;
          return middleware.provideDocumentSymbols ? middleware.provideDocumentSymbols(document, token, _provideDocumentSymbols) : _provideDocumentSymbols(document, token);
        }
      };
      const metaData = options.label !== undefined ? { label: options.label } : undefined;
      return [vscode_1.languages.registerDocumentSymbolProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, metaData), provider];
    }
  }
  exports2.DocumentSymbolFeature = DocumentSymbolFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/workspaceSymbol.js
var require_workspaceSymbol = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WorkspaceSymbolFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var documentSymbol_1 = require_documentSymbol();
  var UUID = __importStar(require_uuid());

  class WorkspaceSymbolFeature extends features_1.WorkspaceFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const symbolCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "symbol");
      symbolCapabilities.dynamicRegistration = true;
      symbolCapabilities.symbolKind = {
        valueSet: documentSymbol_1.SupportedSymbolKinds
      };
      symbolCapabilities.tagSupport = {
        valueSet: documentSymbol_1.SupportedSymbolTags
      };
      symbolCapabilities.resolveSupport = { properties: ["location.range"] };
    }
    initialize(capabilities) {
      if (!capabilities.workspaceSymbolProvider) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: capabilities.workspaceSymbolProvider === true ? { workDoneProgress: false } : capabilities.workspaceSymbolProvider
      });
    }
    registerLanguageProvider(options) {
      const provider = {
        provideWorkspaceSymbols: (query, token) => {
          const client = this._client;
          const provideWorkspaceSymbols = (query2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, { query: query2 }, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asSymbolInformations(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideWorkspaceSymbols ? middleware.provideWorkspaceSymbols(query, token, provideWorkspaceSymbols) : provideWorkspaceSymbols(query, token);
        },
        resolveWorkspaceSymbol: options.resolveProvider === true ? (item, token) => {
          const client = this._client;
          const resolveWorkspaceSymbol = (item2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.type, client.code2ProtocolConverter.asWorkspaceSymbol(item2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asSymbolInformation(result);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.resolveWorkspaceSymbol ? middleware.resolveWorkspaceSymbol(item, token, resolveWorkspaceSymbol) : resolveWorkspaceSymbol(item, token);
        } : undefined
      };
      return [vscode_1.languages.registerWorkspaceSymbolProvider(provider), provider];
    }
  }
  exports2.WorkspaceSymbolFeature = WorkspaceSymbolFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/reference.js
var require_reference = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ReferencesFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class ReferencesFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.ReferencesRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "references").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.referencesProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideReferences: (document, position, options2, token) => {
          const client = this._client;
          const _providerReferences = (document2, position2, options3, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, client.code2ProtocolConverter.asReferenceParams(document2, position2, options3), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asReferences(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideReferences ? middleware.provideReferences(document, position, options2, token, _providerReferences) : _providerReferences(document, position, options2, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerReferenceProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.ReferencesFeature = ReferencesFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/typeDefinition.js
var require_typeDefinition = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TypeDefinitionFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class TypeDefinitionFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.TypeDefinitionRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "typeDefinition").dynamicRegistration = true;
      const typeDefinitionSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "typeDefinition");
      typeDefinitionSupport.dynamicRegistration = true;
      typeDefinitionSupport.linkSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.typeDefinitionProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideTypeDefinition: (document, position, token) => {
          const client = this._client;
          const provideTypeDefinition = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDefinitionResult(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideTypeDefinition ? middleware.provideTypeDefinition(document, position, token, provideTypeDefinition) : provideTypeDefinition(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerTypeDefinitionProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.TypeDefinitionFeature = TypeDefinitionFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/implementation.js
var require_implementation = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ImplementationFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class ImplementationFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.ImplementationRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const implementationSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "implementation");
      implementationSupport.dynamicRegistration = true;
      implementationSupport.linkSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.implementationProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideImplementation: (document, position, token) => {
          const client = this._client;
          const provideImplementation = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDefinitionResult(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideImplementation ? middleware.provideImplementation(document, position, token, provideImplementation) : provideImplementation(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerImplementationProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.ImplementationFeature = ImplementationFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/colorProvider.js
var require_colorProvider = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ColorProviderFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class ColorProviderFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentColorRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "colorProvider").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.colorProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideColorPresentations: (color, context, token) => {
          const client = this._client;
          const provideColorPresentations = (color2, context2, token2) => {
            const requestParams = {
              color: color2,
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(context2.document),
              range: client.code2ProtocolConverter.asRange(context2.range)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, requestParams, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return this._client.protocol2CodeConverter.asColorPresentations(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideColorPresentations ? middleware.provideColorPresentations(color, context, token, provideColorPresentations) : provideColorPresentations(color, context, token);
        },
        provideDocumentColors: (document, token) => {
          const client = this._client;
          const provideDocumentColors = (document2, token2) => {
            const requestParams = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, requestParams, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return this._client.protocol2CodeConverter.asColorInformations(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentColors ? middleware.provideDocumentColors(document, token, provideDocumentColors) : provideDocumentColors(document, token);
        }
      };
      return [vscode_1.languages.registerColorProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.ColorProviderFeature = ColorProviderFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/codeAction.js
var require_codeAction = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CodeActionFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var UUID = __importStar(require_uuid());
  var features_1 = require_features();

  class CodeActionFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.CodeActionRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const cap = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "codeAction");
      cap.dynamicRegistration = true;
      cap.isPreferredSupport = true;
      cap.disabledSupport = true;
      cap.dataSupport = true;
      cap.resolveSupport = {
        properties: ["edit", "command"]
      };
      cap.codeActionLiteralSupport = {
        codeActionKind: {
          valueSet: [
            vscode_languageserver_protocol_1.CodeActionKind.Empty,
            vscode_languageserver_protocol_1.CodeActionKind.QuickFix,
            vscode_languageserver_protocol_1.CodeActionKind.Refactor,
            vscode_languageserver_protocol_1.CodeActionKind.RefactorExtract,
            vscode_languageserver_protocol_1.CodeActionKind.RefactorInline,
            vscode_languageserver_protocol_1.CodeActionKind.RefactorMove,
            vscode_languageserver_protocol_1.CodeActionKind.RefactorRewrite,
            vscode_languageserver_protocol_1.CodeActionKind.Source,
            vscode_languageserver_protocol_1.CodeActionKind.SourceOrganizeImports,
            vscode_languageserver_protocol_1.CodeActionKind.Notebook
          ]
        }
      };
      cap.honorsChangeAnnotations = true;
      cap.documentationSupport = true;
      cap.tagSupport = {
        valueSet: [vscode_languageserver_protocol_1.CodeActionTag.LLMGenerated]
      };
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.codeActionProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideCodeActions: (document, range, context, token) => {
          const client = this._client;
          const _provideCodeActions = async (document2, range2, context2, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              range: client.code2ProtocolConverter.asRange(range2),
              context: client.code2ProtocolConverter.asCodeActionContextSync(context2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, params, token2).then((values) => {
              if (token2.isCancellationRequested || values === null || values === undefined) {
                return null;
              }
              return client.protocol2CodeConverter.asCodeActionResult(values, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideCodeActions ? middleware.provideCodeActions(document, range, context, token, _provideCodeActions) : _provideCodeActions(document, range, context, token);
        },
        resolveCodeAction: options.resolveProvider ? (item, token) => {
          const client = this._client;
          const middleware = this._client.middleware;
          const resolveCodeAction = async (item2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return item2;
              }
              return client.protocol2CodeConverter.asCodeAction(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, token2, error, item2);
            });
          };
          return middleware.resolveCodeAction ? middleware.resolveCodeAction(item, token, resolveCodeAction) : resolveCodeAction(item, token);
        } : undefined
      };
      return [vscode_1.languages.registerCodeActionsProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, this.getMetadata(options)), provider];
    }
    getMetadata(options) {
      if (options.codeActionKinds === undefined && options.documentation === undefined) {
        return;
      }
      return {
        providedCodeActionKinds: this._client.protocol2CodeConverter.asCodeActionKinds(options.codeActionKinds),
        documentation: this._client.protocol2CodeConverter.asCodeActionDocumentations(options.documentation)
      };
    }
  }
  exports2.CodeActionFeature = CodeActionFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/codeLens.js
var require_codeLens = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CodeLensFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var UUID = __importStar(require_uuid());
  var features_1 = require_features();

  class CodeLensFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.CodeLensRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const clc = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "codeLens");
      clc.dynamicRegistration = true;
      clc.resolveSupport = { properties: ["command"] };
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "codeLens").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.CodeLensRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeCodeLensEmitter.fire();
        }
      });
      const options = this.getRegistrationOptions(documentSelector, capabilities.codeLensProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const eventEmitter = new vscode_1.EventEmitter;
      const provider = {
        onDidChangeCodeLenses: eventEmitter.event,
        provideCodeLenses: (document, token) => {
          const client = this._client;
          const provideCodeLenses = (document2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, client.code2ProtocolConverter.asCodeLensParams(document2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asCodeLenses(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideCodeLenses ? middleware.provideCodeLenses(document, token, provideCodeLenses) : provideCodeLenses(document, token);
        },
        resolveCodeLens: options.resolveProvider ? (codeLens, token) => {
          const client = this._client;
          const resolveCodeLens = (codeLens2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, client.code2ProtocolConverter.asCodeLens(codeLens2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return codeLens2;
              }
              return client.protocol2CodeConverter.asCodeLens(result);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, token2, error, codeLens2);
            });
          };
          const middleware = client.middleware;
          return middleware.resolveCodeLens ? middleware.resolveCodeLens(codeLens, token, resolveCodeLens) : resolveCodeLens(codeLens, token);
        } : undefined
      };
      return [vscode_1.languages.registerCodeLensProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), { provider, onDidChangeCodeLensEmitter: eventEmitter }];
    }
  }
  exports2.CodeLensFeature = CodeLensFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/formatting.js
var require_formatting = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DocumentOnTypeFormattingFeature = exports2.DocumentRangeFormattingFeature = exports2.DocumentFormattingFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var UUID = __importStar(require_uuid());
  var features_1 = require_features();
  var FileFormattingOptions;
  (function(FileFormattingOptions2) {
    function fromConfiguration(document) {
      const filesConfig = vscode_1.workspace.getConfiguration("files", document);
      return {
        trimTrailingWhitespace: filesConfig.get("trimTrailingWhitespace"),
        trimFinalNewlines: filesConfig.get("trimFinalNewlines"),
        insertFinalNewline: filesConfig.get("insertFinalNewline")
      };
    }
    FileFormattingOptions2.fromConfiguration = fromConfiguration;
  })(FileFormattingOptions || (FileFormattingOptions = {}));

  class DocumentFormattingFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentFormattingRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "formatting").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentFormattingProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDocumentFormattingEdits: (document, options2, token) => {
          const client = this._client;
          const provideDocumentFormattingEdits = (document2, options3, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              options: client.code2ProtocolConverter.asFormattingOptions(options3, FileFormattingOptions.fromConfiguration(document2))
            };
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asTextEdits(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentFormattingEdits ? middleware.provideDocumentFormattingEdits(document, options2, token, provideDocumentFormattingEdits) : provideDocumentFormattingEdits(document, options2, token);
        }
      };
      return [vscode_1.languages.registerDocumentFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.DocumentFormattingFeature = DocumentFormattingFeature;

  class DocumentRangeFormattingFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "rangeFormatting");
      capability.dynamicRegistration = true;
      capability.rangesSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentRangeFormattingProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDocumentRangeFormattingEdits: (document, range, options2, token) => {
          const client = this._client;
          const provideDocumentRangeFormattingEdits = (document2, range2, options3, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              range: client.code2ProtocolConverter.asRange(range2),
              options: client.code2ProtocolConverter.asFormattingOptions(options3, FileFormattingOptions.fromConfiguration(document2))
            };
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asTextEdits(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentRangeFormattingEdits ? middleware.provideDocumentRangeFormattingEdits(document, range, options2, token, provideDocumentRangeFormattingEdits) : provideDocumentRangeFormattingEdits(document, range, options2, token);
        }
      };
      if (options.rangesSupport) {
        provider.provideDocumentRangesFormattingEdits = (document, ranges, options2, token) => {
          const client = this._client;
          const provideDocumentRangesFormattingEdits = (document2, ranges2, options3, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              ranges: client.code2ProtocolConverter.asRanges(ranges2),
              options: client.code2ProtocolConverter.asFormattingOptions(options3, FileFormattingOptions.fromConfiguration(document2))
            };
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentRangesFormattingRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asTextEdits(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentRangesFormattingRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentRangesFormattingEdits ? middleware.provideDocumentRangesFormattingEdits(document, ranges, options2, token, provideDocumentRangesFormattingEdits) : provideDocumentRangesFormattingEdits(document, ranges, options2, token);
        };
      }
      return [vscode_1.languages.registerDocumentRangeFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.DocumentRangeFormattingFeature = DocumentRangeFormattingFeature;

  class DocumentOnTypeFormattingFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "onTypeFormatting").dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentOnTypeFormattingProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideOnTypeFormattingEdits: (document, position, ch, options2, token) => {
          const client = this._client;
          const provideOnTypeFormattingEdits = (document2, position2, ch2, options3, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              position: client.code2ProtocolConverter.asPosition(position2),
              ch: ch2,
              options: client.code2ProtocolConverter.asFormattingOptions(options3, FileFormattingOptions.fromConfiguration(document2))
            };
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asTextEdits(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideOnTypeFormattingEdits ? middleware.provideOnTypeFormattingEdits(document, position, ch, options2, token, provideOnTypeFormattingEdits) : provideOnTypeFormattingEdits(document, position, ch, options2, token);
        }
      };
      const moreTriggerCharacter = options.moreTriggerCharacter || [];
      return [vscode_1.languages.registerOnTypeFormattingEditProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider, options.firstTriggerCharacter, ...moreTriggerCharacter), provider];
    }
  }
  exports2.DocumentOnTypeFormattingFeature = DocumentOnTypeFormattingFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/rename.js
var require_rename = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.RenameFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var UUID = __importStar(require_uuid());
  var Is = __importStar(require_is());
  var features_1 = require_features();

  class RenameFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.RenameRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const rename = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "rename");
      rename.dynamicRegistration = true;
      rename.prepareSupport = true;
      rename.prepareSupportDefaultBehavior = vscode_languageserver_protocol_1.PrepareSupportDefaultBehavior.Identifier;
      rename.honorsChangeAnnotations = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.renameProvider);
      if (!options) {
        return;
      }
      if (Is.boolean(capabilities.renameProvider)) {
        options.prepareProvider = false;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideRenameEdits: (document, position, newName, token) => {
          const client = this._client;
          const provideRenameEdits = async (document2, position2, newName2, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              position: client.code2ProtocolConverter.asPosition(position2),
              newName: newName2
            };
            let result = null;
            try {
              result = await client.sendRequest(vscode_languageserver_protocol_1.RenameRequest.type, params, token2);
            } catch (error) {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.RenameRequest.type, token2, error, null, false);
            }
            if (token2.isCancellationRequested || result === null) {
              return null;
            }
            const converted = await client.protocol2CodeConverter.asWorkspaceEdit(result, token2);
            if (token2.isCancellationRequested) {
              return null;
            }
            if (!client.validateWorkspaceEdit(result)) {
              throw new Error(`The rename edit returned from the server is not valid anymore and cannot be applied.`);
            }
            return converted;
          };
          const middleware = client.middleware;
          return middleware.provideRenameEdits ? middleware.provideRenameEdits(document, position, newName, token, provideRenameEdits) : provideRenameEdits(document, position, newName, token);
        },
        prepareRename: options.prepareProvider ? (document, position, token) => {
          const client = this._client;
          const prepareRename = (document2, position2, token2) => {
            const params = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              position: client.code2ProtocolConverter.asPosition(position2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              if (vscode_languageserver_protocol_1.Range.is(result)) {
                return client.protocol2CodeConverter.asRange(result);
              } else if (this.isDefaultBehavior(result)) {
                return result.defaultBehavior === true ? null : Promise.reject(new Error(`The element can't be renamed.`));
              } else if (result && vscode_languageserver_protocol_1.Range.is(result.range)) {
                return {
                  range: client.protocol2CodeConverter.asRange(result.range),
                  placeholder: result.placeholder
                };
              }
              return Promise.reject(new Error(`The element can't be renamed.`));
            }, (error) => {
              if (typeof error.message === "string") {
                throw new Error(error.message);
              } else {
                throw new Error(`The element can't be renamed.`);
              }
            });
          };
          const middleware = client.middleware;
          return middleware.prepareRename ? middleware.prepareRename(document, position, token, prepareRename) : prepareRename(document, position, token);
        } : undefined
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerRenameProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
    isDefaultBehavior(value) {
      const candidate = value;
      return candidate && Is.boolean(candidate.defaultBehavior);
    }
  }
  exports2.RenameFeature = RenameFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/documentLink.js
var require_documentLink = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DocumentLinkFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class DocumentLinkFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DocumentLinkRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const documentLinkCapabilities = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "documentLink");
      documentLinkCapabilities.dynamicRegistration = true;
      documentLinkCapabilities.tooltipSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.documentLinkProvider);
      if (!options) {
        return;
      }
      this.register({ id: UUID.generateUuid(), registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDocumentLinks: (document, token) => {
          const client = this._client;
          const provideDocumentLinks = (document2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, client.code2ProtocolConverter.asDocumentLinkParams(document2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDocumentLinks(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDocumentLinks ? middleware.provideDocumentLinks(document, token, provideDocumentLinks) : provideDocumentLinks(document, token);
        },
        resolveDocumentLink: options.resolveProvider ? (link, token) => {
          const client = this._client;
          const resolveDocumentLink = (link2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, client.code2ProtocolConverter.asDocumentLink(link2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return link2;
              }
              return client.protocol2CodeConverter.asDocumentLink(result);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, token2, error, link2);
            });
          };
          const middleware = client.middleware;
          return middleware.resolveDocumentLink ? middleware.resolveDocumentLink(link, token, resolveDocumentLink) : resolveDocumentLink(link, token);
        } : undefined
      };
      return [vscode_1.languages.registerDocumentLinkProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.DocumentLinkFeature = DocumentLinkFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/executeCommand.js
var require_executeCommand = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ExecuteCommandFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var UUID = __importStar(require_uuid());
  var features_1 = require_features();

  class ExecuteCommandFeature {
    _client;
    _commands;
    constructor(client) {
      this._client = client;
      this._commands = new Map;
    }
    getState() {
      return { kind: "workspace", id: this.registrationType.method, registrations: this._commands.size > 0 };
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.ExecuteCommandRequest.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "executeCommand").dynamicRegistration = true;
    }
    initialize(capabilities) {
      if (!capabilities.executeCommandProvider) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: Object.assign({}, capabilities.executeCommandProvider)
      });
    }
    register(data) {
      const client = this._client;
      const middleware = client.middleware;
      const executeCommand = (command, args) => {
        const params = {
          command,
          arguments: args
        };
        return client.sendRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, params).then(undefined, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, undefined, error, undefined);
        });
      };
      if (data.registerOptions.commands) {
        const disposables = [];
        for (const command of data.registerOptions.commands) {
          disposables.push(vscode_1.commands.registerCommand(command, (...args) => {
            return middleware.executeCommand ? middleware.executeCommand(command, args, executeCommand) : executeCommand(command, args);
          }));
        }
        this._commands.set(data.id, disposables);
      }
    }
    unregister(id) {
      const disposables = this._commands.get(id);
      if (disposables) {
        this._commands.delete(id);
        disposables.forEach((disposable) => disposable.dispose());
      }
    }
    clear() {
      this._commands.forEach((value) => {
        value.forEach((disposable) => disposable.dispose());
      });
      this._commands.clear();
    }
  }
  exports2.ExecuteCommandFeature = ExecuteCommandFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/foldingRange.js
var require_foldingRange = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.FoldingRangeFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class FoldingRangeFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.FoldingRangeRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "foldingRange");
      capability.dynamicRegistration = true;
      capability.rangeLimit = 5000;
      capability.lineFoldingOnly = true;
      capability.foldingRangeKind = { valueSet: [vscode_languageserver_protocol_1.FoldingRangeKind.Comment, vscode_languageserver_protocol_1.FoldingRangeKind.Imports, vscode_languageserver_protocol_1.FoldingRangeKind.Region] };
      capability.foldingRange = { collapsedText: false };
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "foldingRange").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      this._client.onRequest(vscode_languageserver_protocol_1.FoldingRangeRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeFoldingRange.fire();
        }
      });
      const [id, options] = this.getRegistration(documentSelector, capabilities.foldingRangeProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const eventEmitter = new vscode_1.EventEmitter;
      const provider = {
        onDidChangeFoldingRanges: eventEmitter.event,
        provideFoldingRanges: (document, context, token) => {
          const client = this._client;
          const provideFoldingRanges = (document2, _, token2) => {
            const requestParams = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, requestParams, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asFoldingRanges(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideFoldingRanges ? middleware.provideFoldingRanges(document, context, token, provideFoldingRanges) : provideFoldingRanges(document, context, token);
        }
      };
      return [vscode_1.languages.registerFoldingRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), { provider, onDidChangeFoldingRange: eventEmitter }];
    }
  }
  exports2.FoldingRangeFeature = FoldingRangeFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/declaration.js
var require_declaration = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DeclarationFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class DeclarationFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.DeclarationRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const declarationSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "declaration");
      declarationSupport.dynamicRegistration = true;
      declarationSupport.linkSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.declarationProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideDeclaration: (document, position, token) => {
          const client = this._client;
          const provideDeclaration = (document2, position2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asDeclarationResult(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideDeclaration ? middleware.provideDeclaration(document, position, token, provideDeclaration) : provideDeclaration(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerDeclarationProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.DeclarationFeature = DeclarationFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/selectionRange.js
var require_selectionRange = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SelectionRangeFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class SelectionRangeFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.SelectionRangeRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "selectionRange");
      capability.dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.selectionRangeProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideSelectionRanges: (document, positions, token) => {
          const client = this._client;
          const provideSelectionRanges = async (document2, positions2, token2) => {
            const requestParams = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              positions: client.code2ProtocolConverter.asPositionsSync(positions2, token2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, requestParams, token2).then((ranges) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asSelectionRanges(ranges, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideSelectionRanges ? middleware.provideSelectionRanges(document, positions, token, provideSelectionRanges) : provideSelectionRanges(document, positions, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerSelectionRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.SelectionRangeFeature = SelectionRangeFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/callHierarchy.js
var require_callHierarchy = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.CallHierarchyFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class CallHierarchyProvider {
    client;
    middleware;
    constructor(client) {
      this.client = client;
      this.middleware = client.middleware;
    }
    prepareCallHierarchy(document, position, token) {
      const client = this.client;
      const middleware = this.middleware;
      const prepareCallHierarchy = (document2, position2, token2) => {
        const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2);
        return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asCallHierarchyItems(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, token2, error, null);
        });
      };
      return middleware.prepareCallHierarchy ? middleware.prepareCallHierarchy(document, position, token, prepareCallHierarchy) : prepareCallHierarchy(document, position, token);
    }
    provideCallHierarchyIncomingCalls(item, token) {
      const client = this.client;
      const middleware = this.middleware;
      const provideCallHierarchyIncomingCalls = (item2, token2) => {
        const params = {
          item: client.code2ProtocolConverter.asCallHierarchyItem(item2)
        };
        return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asCallHierarchyIncomingCalls(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type, token2, error, null);
        });
      };
      return middleware.provideCallHierarchyIncomingCalls ? middleware.provideCallHierarchyIncomingCalls(item, token, provideCallHierarchyIncomingCalls) : provideCallHierarchyIncomingCalls(item, token);
    }
    provideCallHierarchyOutgoingCalls(item, token) {
      const client = this.client;
      const middleware = this.middleware;
      const provideCallHierarchyOutgoingCalls = (item2, token2) => {
        const params = {
          item: client.code2ProtocolConverter.asCallHierarchyItem(item2)
        };
        return client.sendRequest(vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asCallHierarchyOutgoingCalls(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type, token2, error, null);
        });
      };
      return middleware.provideCallHierarchyOutgoingCalls ? middleware.provideCallHierarchyOutgoingCalls(item, token, provideCallHierarchyOutgoingCalls) : provideCallHierarchyOutgoingCalls(item, token);
    }
  }

  class CallHierarchyFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type);
    }
    fillClientCapabilities(cap) {
      const capabilities = cap;
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "callHierarchy");
      capability.dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.callHierarchyProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const client = this._client;
      const provider = new CallHierarchyProvider(client);
      return [vscode_1.languages.registerCallHierarchyProvider(this._client.protocol2CodeConverter.asDocumentSelector(options.documentSelector), provider), provider];
    }
  }
  exports2.CallHierarchyFeature = CallHierarchyFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/semanticTokens.js
var require_semanticTokens = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SemanticTokensFeature = undefined;
  var vscode = __importStar(require("vscode"));
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var Is = __importStar(require_is());

  class SemanticTokensFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.SemanticTokensRegistrationType.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "semanticTokens");
      capability.dynamicRegistration = true;
      capability.tokenTypes = [
        vscode_languageserver_protocol_1.SemanticTokenTypes.namespace,
        vscode_languageserver_protocol_1.SemanticTokenTypes.type,
        vscode_languageserver_protocol_1.SemanticTokenTypes.class,
        vscode_languageserver_protocol_1.SemanticTokenTypes.enum,
        vscode_languageserver_protocol_1.SemanticTokenTypes.interface,
        vscode_languageserver_protocol_1.SemanticTokenTypes.struct,
        vscode_languageserver_protocol_1.SemanticTokenTypes.typeParameter,
        vscode_languageserver_protocol_1.SemanticTokenTypes.parameter,
        vscode_languageserver_protocol_1.SemanticTokenTypes.variable,
        vscode_languageserver_protocol_1.SemanticTokenTypes.property,
        vscode_languageserver_protocol_1.SemanticTokenTypes.enumMember,
        vscode_languageserver_protocol_1.SemanticTokenTypes.event,
        vscode_languageserver_protocol_1.SemanticTokenTypes.function,
        vscode_languageserver_protocol_1.SemanticTokenTypes.method,
        vscode_languageserver_protocol_1.SemanticTokenTypes.macro,
        vscode_languageserver_protocol_1.SemanticTokenTypes.keyword,
        vscode_languageserver_protocol_1.SemanticTokenTypes.comment,
        vscode_languageserver_protocol_1.SemanticTokenTypes.string,
        vscode_languageserver_protocol_1.SemanticTokenTypes.number,
        vscode_languageserver_protocol_1.SemanticTokenTypes.regexp,
        vscode_languageserver_protocol_1.SemanticTokenTypes.operator,
        vscode_languageserver_protocol_1.SemanticTokenTypes.decorator,
        vscode_languageserver_protocol_1.SemanticTokenTypes.label
      ];
      capability.tokenModifiers = [
        vscode_languageserver_protocol_1.SemanticTokenModifiers.declaration,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.definition,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.readonly,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.static,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.deprecated,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.abstract,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.async,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.modification,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.documentation,
        vscode_languageserver_protocol_1.SemanticTokenModifiers.defaultLibrary
      ];
      capability.formats = [vscode_languageserver_protocol_1.TokenFormat.Relative];
      capability.requests = {
        range: true,
        full: {
          delta: true
        }
      };
      capability.multilineTokenSupport = false;
      capability.overlappingTokenSupport = false;
      capability.serverCancelSupport = true;
      capability.augmentsSyntaxTokens = true;
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "semanticTokens").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.SemanticTokensRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeSemanticTokensEmitter.fire();
        }
      });
      const [id, options] = this.getRegistration(documentSelector, capabilities.semanticTokensProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const fullProvider = Is.boolean(options.full) ? options.full : options.full !== undefined;
      const hasEditProvider = options.full !== undefined && typeof options.full !== "boolean" && options.full.delta === true;
      const eventEmitter = new vscode.EventEmitter;
      const documentProvider = fullProvider ? {
        onDidChangeSemanticTokens: eventEmitter.event,
        provideDocumentSemanticTokens: (document, token) => {
          const client2 = this._client;
          const middleware = client2.middleware;
          const provideDocumentSemanticTokens = (document2, token2) => {
            const params = {
              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2)
            };
            return client2.sendRequest(vscode_languageserver_protocol_1.SemanticTokensRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client2.protocol2CodeConverter.asSemanticTokens(result, token2);
            }, (error) => {
              return client2.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensRequest.type, token2, error, null);
            });
          };
          return middleware.provideDocumentSemanticTokens ? middleware.provideDocumentSemanticTokens(document, token, provideDocumentSemanticTokens) : provideDocumentSemanticTokens(document, token);
        },
        provideDocumentSemanticTokensEdits: hasEditProvider ? (document, previousResultId, token) => {
          const client2 = this._client;
          const middleware = client2.middleware;
          const provideDocumentSemanticTokensEdits = (document2, previousResultId2, token2) => {
            const params = {
              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              previousResultId: previousResultId2
            };
            return client2.sendRequest(vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type, params, token2).then(async (result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              if (vscode_languageserver_protocol_1.SemanticTokens.is(result)) {
                return await client2.protocol2CodeConverter.asSemanticTokens(result, token2);
              } else {
                return await client2.protocol2CodeConverter.asSemanticTokensEdits(result, token2);
              }
            }, (error) => {
              return client2.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type, token2, error, null);
            });
          };
          return middleware.provideDocumentSemanticTokensEdits ? middleware.provideDocumentSemanticTokensEdits(document, previousResultId, token, provideDocumentSemanticTokensEdits) : provideDocumentSemanticTokensEdits(document, previousResultId, token);
        } : undefined
      } : undefined;
      const hasRangeProvider = options.range === true;
      const rangeProvider = hasRangeProvider ? {
        onDidChangeSemanticTokens: eventEmitter.event,
        provideDocumentRangeSemanticTokens: (document, range, token) => {
          const client2 = this._client;
          const middleware = client2.middleware;
          const provideDocumentRangeSemanticTokens = (document2, range2, token2) => {
            const params = {
              textDocument: client2.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              range: client2.code2ProtocolConverter.asRange(range2)
            };
            return client2.sendRequest(vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client2.protocol2CodeConverter.asSemanticTokens(result, token2);
            }, (error) => {
              return client2.handleFailedRequest(vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type, token2, error, null);
            });
          };
          return middleware.provideDocumentRangeSemanticTokens ? middleware.provideDocumentRangeSemanticTokens(document, range, token, provideDocumentRangeSemanticTokens) : provideDocumentRangeSemanticTokens(document, range, token);
        }
      } : undefined;
      const disposables = [];
      const client = this._client;
      const legend = client.protocol2CodeConverter.asSemanticTokensLegend(options.legend);
      const documentSelector = client.protocol2CodeConverter.asDocumentSelector(selector);
      if (documentProvider !== undefined) {
        disposables.push(vscode.languages.registerDocumentSemanticTokensProvider(documentSelector, documentProvider, legend));
      }
      if (rangeProvider !== undefined) {
        disposables.push(vscode.languages.registerDocumentRangeSemanticTokensProvider(documentSelector, rangeProvider, legend));
      }
      return [new vscode.Disposable(() => disposables.forEach((item) => item.dispose())), { range: rangeProvider, full: documentProvider, onDidChangeSemanticTokensEmitter: eventEmitter }];
    }
  }
  exports2.SemanticTokensFeature = SemanticTokensFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/linkedEditingRange.js
var require_linkedEditingRange = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.LinkedEditingFeature = undefined;
  var code = __importStar(require("vscode"));
  var proto = __importStar(require_api2());
  var features_1 = require_features();

  class LinkedEditingFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, proto.LinkedEditingRangeRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const linkedEditingSupport = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "linkedEditingRange");
      linkedEditingSupport.dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.linkedEditingRangeProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideLinkedEditingRanges: (document, position, token) => {
          const client = this._client;
          const provideLinkedEditing = (document2, position2, token2) => {
            return client.sendRequest(proto.LinkedEditingRangeRequest.type, client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asLinkedEditingRanges(result, token2);
            }, (error) => {
              return client.handleFailedRequest(proto.LinkedEditingRangeRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideLinkedEditingRange ? middleware.provideLinkedEditingRange(document, position, token, provideLinkedEditing) : provideLinkedEditing(document, position, token);
        }
      };
      return [this.registerProvider(selector, provider), provider];
    }
    registerProvider(selector, provider) {
      return code.languages.registerLinkedEditingRangeProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.LinkedEditingFeature = LinkedEditingFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/typeHierarchy.js
var require_typeHierarchy = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TypeHierarchyFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class TypeHierarchyProvider {
    client;
    middleware;
    constructor(client) {
      this.client = client;
      this.middleware = client.middleware;
    }
    prepareTypeHierarchy(document, position, token) {
      const client = this.client;
      const middleware = this.middleware;
      const prepareTypeHierarchy = (document2, position2, token2) => {
        const params = client.code2ProtocolConverter.asTextDocumentPositionParams(document2, position2);
        return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asTypeHierarchyItems(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type, token2, error, null);
        });
      };
      return middleware.prepareTypeHierarchy ? middleware.prepareTypeHierarchy(document, position, token, prepareTypeHierarchy) : prepareTypeHierarchy(document, position, token);
    }
    provideTypeHierarchySupertypes(item, token) {
      const client = this.client;
      const middleware = this.middleware;
      const provideTypeHierarchySupertypes = (item2, token2) => {
        const params = {
          item: client.code2ProtocolConverter.asTypeHierarchyItem(item2)
        };
        return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchySupertypesRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asTypeHierarchyItems(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchySupertypesRequest.type, token2, error, null);
        });
      };
      return middleware.provideTypeHierarchySupertypes ? middleware.provideTypeHierarchySupertypes(item, token, provideTypeHierarchySupertypes) : provideTypeHierarchySupertypes(item, token);
    }
    provideTypeHierarchySubtypes(item, token) {
      const client = this.client;
      const middleware = this.middleware;
      const provideTypeHierarchySubtypes = (item2, token2) => {
        const params = {
          item: client.code2ProtocolConverter.asTypeHierarchyItem(item2)
        };
        return client.sendRequest(vscode_languageserver_protocol_1.TypeHierarchySubtypesRequest.type, params, token2).then((result) => {
          if (token2.isCancellationRequested) {
            return null;
          }
          return client.protocol2CodeConverter.asTypeHierarchyItems(result, token2);
        }, (error) => {
          return client.handleFailedRequest(vscode_languageserver_protocol_1.TypeHierarchySubtypesRequest.type, token2, error, null);
        });
      };
      return middleware.provideTypeHierarchySubtypes ? middleware.provideTypeHierarchySubtypes(item, token, provideTypeHierarchySubtypes) : provideTypeHierarchySubtypes(item, token);
    }
  }

  class TypeHierarchyFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.TypeHierarchyPrepareRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const capability = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "typeHierarchy");
      capability.dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const [id, options] = this.getRegistration(documentSelector, capabilities.typeHierarchyProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const client = this._client;
      const provider = new TypeHierarchyProvider(client);
      return [vscode_1.languages.registerTypeHierarchyProvider(client.protocol2CodeConverter.asDocumentSelector(options.documentSelector), provider), provider];
    }
  }
  exports2.TypeHierarchyFeature = TypeHierarchyFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/inlineValue.js
var require_inlineValue = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlineValueFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class InlineValueFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.InlineValueRequest.type);
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "inlineValue").dynamicRegistration = true;
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "inlineValue").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      this._client.onRequest(vscode_languageserver_protocol_1.InlineValueRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeInlineValues.fire();
        }
      });
      const [id, options] = this.getRegistration(documentSelector, capabilities.inlineValueProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const eventEmitter = new vscode_1.EventEmitter;
      const provider = {
        onDidChangeInlineValues: eventEmitter.event,
        provideInlineValues: (document, viewPort, context, token) => {
          const client = this._client;
          const provideInlineValues = (document2, viewPort2, context2, token2) => {
            const requestParams = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              range: client.code2ProtocolConverter.asRange(viewPort2),
              context: client.code2ProtocolConverter.asInlineValueContext(context2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.InlineValueRequest.type, requestParams, token2).then((values) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asInlineValues(values, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.InlineValueRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideInlineValues ? middleware.provideInlineValues(document, viewPort, context, token, provideInlineValues) : provideInlineValues(document, viewPort, context, token);
        }
      };
      return [this.registerProvider(selector, provider), { provider, onDidChangeInlineValues: eventEmitter }];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerInlineValuesProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.InlineValueFeature = InlineValueFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/inlayHint.js
var require_inlayHint = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlayHintsFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class InlayHintsFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.InlayHintRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const inlayHint = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "inlayHint");
      inlayHint.dynamicRegistration = true;
      inlayHint.resolveSupport = {
        properties: ["tooltip", "textEdits", "label.tooltip", "label.location", "label.command"]
      };
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "inlayHint").refreshSupport = true;
    }
    initialize(capabilities, documentSelector) {
      this._client.onRequest(vscode_languageserver_protocol_1.InlayHintRefreshRequest.type, async () => {
        for (const provider of this.getAllProviders()) {
          provider.onDidChangeInlayHints.fire();
        }
      });
      const [id, options] = this.getRegistration(documentSelector, capabilities.inlayHintProvider);
      if (!id || !options) {
        return;
      }
      this.register({ id, registerOptions: options });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const eventEmitter = new vscode_1.EventEmitter;
      const provider = {
        onDidChangeInlayHints: eventEmitter.event,
        provideInlayHints: (document, viewPort, token) => {
          const client = this._client;
          const provideInlayHints = async (document2, viewPort2, token2) => {
            const requestParams = {
              textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document2),
              range: client.code2ProtocolConverter.asRange(viewPort2)
            };
            try {
              const values = await client.sendRequest(vscode_languageserver_protocol_1.InlayHintRequest.type, requestParams, token2);
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asInlayHints(values, token2);
            } catch (error) {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.InlayHintRequest.type, token2, error, null);
            }
          };
          const middleware = client.middleware;
          return middleware.provideInlayHints ? middleware.provideInlayHints(document, viewPort, token, provideInlayHints) : provideInlayHints(document, viewPort, token);
        }
      };
      provider.resolveInlayHint = options.resolveProvider === true ? (hint, token) => {
        const client = this._client;
        const resolveInlayHint = async (item, token2) => {
          try {
            const value = await client.sendRequest(vscode_languageserver_protocol_1.InlayHintResolveRequest.type, client.code2ProtocolConverter.asInlayHint(item), token2);
            if (token2.isCancellationRequested) {
              return null;
            }
            const result = client.protocol2CodeConverter.asInlayHint(value, token2);
            return token2.isCancellationRequested ? null : result;
          } catch (error) {
            return client.handleFailedRequest(vscode_languageserver_protocol_1.InlayHintResolveRequest.type, token2, error, null);
          }
        };
        const middleware = client.middleware;
        return middleware.resolveInlayHint ? middleware.resolveInlayHint(hint, token, resolveInlayHint) : resolveInlayHint(hint, token);
      } : undefined;
      return [this.registerProvider(selector, provider), { provider, onDidChangeInlayHints: eventEmitter }];
    }
    registerProvider(selector, provider) {
      return vscode_1.languages.registerInlayHintsProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider);
    }
  }
  exports2.InlayHintsFeature = InlayHintsFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/workspaceFolder.js
var require_workspaceFolder = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WorkspaceFoldersFeature = undefined;
  exports2.arrayDiff = arrayDiff;
  var UUID = __importStar(require_uuid());
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  function access(target, key) {
    if (target === undefined || target === null) {
      return;
    }
    return target[key];
  }
  function arrayDiff(left, right) {
    return left.filter((element) => right.indexOf(element) < 0);
  }

  class WorkspaceFoldersFeature {
    _client;
    _listeners;
    _initialFolders;
    constructor(client) {
      this._client = client;
      this._listeners = new Map;
    }
    getState() {
      return { kind: "workspace", id: this.registrationType.method, registrations: this._listeners.size > 0 };
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type;
    }
    fillInitializeParams(params) {
      const folders = vscode_1.workspace.workspaceFolders;
      this.initializeWithFolders(folders);
      if (folders === undefined) {
        params.workspaceFolders = null;
      } else {
        params.workspaceFolders = folders.map((folder) => this.asProtocol(folder));
      }
    }
    initializeWithFolders(currentWorkspaceFolders) {
      this._initialFolders = currentWorkspaceFolders;
    }
    fillClientCapabilities(capabilities) {
      capabilities.workspace = capabilities.workspace || {};
      capabilities.workspace.workspaceFolders = true;
    }
    initialize(capabilities) {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type, (token) => {
        const workspaceFolders = () => {
          const folders = vscode_1.workspace.workspaceFolders;
          if (folders === undefined) {
            return null;
          }
          const result = folders.map((folder) => {
            return this.asProtocol(folder);
          });
          return result;
        };
        const middleware = client.middleware.workspace;
        return middleware && middleware.workspaceFolders ? middleware.workspaceFolders(token, workspaceFolders) : workspaceFolders(token);
      });
      const value = access(access(access(capabilities, "workspace"), "workspaceFolders"), "changeNotifications");
      let id;
      if (typeof value === "string") {
        id = value;
      } else if (value === true) {
        id = UUID.generateUuid();
      }
      if (id) {
        this.register({ id, registerOptions: undefined });
      }
    }
    sendInitialEvent(currentWorkspaceFolders) {
      let promise;
      if (this._initialFolders && currentWorkspaceFolders) {
        const removed = arrayDiff(this._initialFolders, currentWorkspaceFolders);
        const added = arrayDiff(currentWorkspaceFolders, this._initialFolders);
        if (added.length > 0 || removed.length > 0) {
          promise = this.doSendEvent(added, removed);
        }
      } else if (this._initialFolders) {
        promise = this.doSendEvent([], this._initialFolders);
      } else if (currentWorkspaceFolders) {
        promise = this.doSendEvent(currentWorkspaceFolders, []);
      }
      if (promise !== undefined) {
        promise.catch((error) => {
          this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, error);
        });
      }
    }
    doSendEvent(addedFolders, removedFolders) {
      const params = {
        event: {
          added: addedFolders.map((folder) => this.asProtocol(folder)),
          removed: removedFolders.map((folder) => this.asProtocol(folder))
        }
      };
      return this._client.sendNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, params);
    }
    register(data) {
      const id = data.id;
      const client = this._client;
      const disposable = vscode_1.workspace.onDidChangeWorkspaceFolders((event) => {
        const didChangeWorkspaceFolders = (event2) => {
          return this.doSendEvent(event2.added, event2.removed);
        };
        const middleware = client.middleware.workspace;
        const promise = middleware && middleware.didChangeWorkspaceFolders ? middleware.didChangeWorkspaceFolders(event, didChangeWorkspaceFolders) : didChangeWorkspaceFolders(event);
        promise.catch((error) => {
          this._client.error(`Sending notification ${vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type.method} failed`, error);
        });
      });
      this._listeners.set(id, disposable);
      this.sendInitialEvent(vscode_1.workspace.workspaceFolders);
    }
    unregister(id) {
      const disposable = this._listeners.get(id);
      if (disposable === undefined) {
        return;
      }
      this._listeners.delete(id);
      disposable.dispose();
    }
    clear() {
      for (const disposable of this._listeners.values()) {
        disposable.dispose();
      }
      this._listeners.clear();
    }
    asProtocol(workspaceFolder) {
      if (workspaceFolder === undefined) {
        return null;
      }
      return { uri: this._client.code2ProtocolConverter.asUri(workspaceFolder.uri), name: workspaceFolder.name };
    }
  }
  exports2.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/fileOperations.js
var require_fileOperations = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.WillDeleteFilesFeature = exports2.WillRenameFilesFeature = exports2.WillCreateFilesFeature = exports2.DidDeleteFilesFeature = exports2.DidRenameFilesFeature = exports2.DidCreateFilesFeature = undefined;
  var code = __importStar(require("vscode"));
  var minimatch = __importStar(require_commonjs3());
  var proto = __importStar(require_api2());
  var UUID = __importStar(require_uuid());
  function ensure(target, key) {
    if (target[key] === undefined) {
      target[key] = {};
    }
    return target[key];
  }
  function access(target, key) {
    return target[key];
  }
  function assign(target, key, value) {
    target[key] = value;
  }

  class FileOperationFeature {
    _client;
    _event;
    _registrationType;
    _clientCapability;
    _serverCapability;
    _listener;
    _filters;
    constructor(client, event, registrationType, clientCapability, serverCapability) {
      this._client = client;
      this._event = event;
      this._registrationType = registrationType;
      this._clientCapability = clientCapability;
      this._serverCapability = serverCapability;
      this._filters = new Map;
    }
    getState() {
      return { kind: "workspace", id: this._registrationType.method, registrations: this._filters.size > 0 };
    }
    filterSize() {
      return this._filters.size;
    }
    get registrationType() {
      return this._registrationType;
    }
    fillClientCapabilities(capabilities) {
      const value = ensure(ensure(capabilities, "workspace"), "fileOperations");
      assign(value, "dynamicRegistration", true);
      assign(value, this._clientCapability, true);
    }
    initialize(capabilities) {
      const options = capabilities.workspace?.fileOperations;
      const capability = options !== undefined ? access(options, this._serverCapability) : undefined;
      if (capability?.filters !== undefined) {
        try {
          this.register({
            id: UUID.generateUuid(),
            registerOptions: { filters: capability.filters }
          });
        } catch (e) {
          this._client.warn(`Ignoring invalid glob pattern for ${this._serverCapability} registration: ${e}`);
        }
      }
    }
    register(data) {
      if (!this._listener) {
        this._listener = this._event(this.send, this);
      }
      const minimatchFilter = data.registerOptions.filters.map((filter) => {
        const matcher = new minimatch.Minimatch(filter.pattern.glob, FileOperationFeature.asMinimatchOptions(filter.pattern.options));
        if (!matcher.makeRe()) {
          throw new Error(`Invalid pattern ${filter.pattern.glob}!`);
        }
        return { scheme: filter.scheme, matcher, kind: filter.pattern.matches };
      });
      this._filters.set(data.id, minimatchFilter);
    }
    unregister(id) {
      this._filters.delete(id);
      if (this._filters.size === 0 && this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    clear() {
      this._filters.clear();
      if (this._listener) {
        this._listener.dispose();
        this._listener = undefined;
      }
    }
    getFileType(uri) {
      return FileOperationFeature.getFileType(uri);
    }
    async filter(event, prop) {
      const fileMatches = await Promise.all(event.files.map(async (item) => {
        const uri = prop(item);
        const path = uri.fsPath.replace(/\\/g, "/");
        for (const filters of this._filters.values()) {
          for (const filter of filters) {
            if (filter.scheme !== undefined && filter.scheme !== uri.scheme) {
              continue;
            }
            if (filter.matcher.match(path)) {
              if (filter.kind === undefined) {
                return true;
              }
              const fileType = await this.getFileType(uri);
              if (fileType === undefined) {
                this._client.info(`Unable to determine file type for ${uri.toString()}. Treating as a match.`);
                return true;
              }
              if (fileType === code.FileType.File && filter.kind === proto.FileOperationPatternKind.file || fileType === code.FileType.Directory && filter.kind === proto.FileOperationPatternKind.folder) {
                return true;
              }
            } else if (filter.kind === proto.FileOperationPatternKind.folder) {
              const fileType = await FileOperationFeature.getFileType(uri);
              if (fileType === code.FileType.Directory && filter.matcher.match(`${path}/`)) {
                return true;
              }
            }
          }
        }
        return false;
      }));
      const files = event.files.filter((_, index) => fileMatches[index]);
      return { ...event, files };
    }
    static async getFileType(uri) {
      try {
        return (await code.workspace.fs.stat(uri)).type;
      } catch (e) {
        return;
      }
    }
    static asMinimatchOptions(options) {
      const result = { dot: true };
      if (options?.ignoreCase === true) {
        result.nocase = true;
      }
      return result;
    }
  }

  class NotificationFileOperationFeature extends FileOperationFeature {
    _notificationType;
    _accessUri;
    _createParams;
    constructor(client, event, notificationType, clientCapability, serverCapability, accessUri, createParams) {
      super(client, event, notificationType, clientCapability, serverCapability);
      this._notificationType = notificationType;
      this._accessUri = accessUri;
      this._createParams = createParams;
    }
    async send(originalEvent) {
      const filteredEvent = await this.filter(originalEvent, this._accessUri);
      if (filteredEvent.files.length) {
        const next = async (event) => {
          return this._client.sendNotification(this._notificationType, this._createParams(event));
        };
        return this.doSend(filteredEvent, next);
      }
    }
  }

  class CachingNotificationFileOperationFeature extends NotificationFileOperationFeature {
    _willListener;
    _fsPathFileTypes = new Map;
    async getFileType(uri) {
      const fsPath = uri.fsPath;
      if (this._fsPathFileTypes.has(fsPath)) {
        return this._fsPathFileTypes.get(fsPath);
      }
      const type = await FileOperationFeature.getFileType(uri);
      if (type) {
        this._fsPathFileTypes.set(fsPath, type);
      }
      return type;
    }
    async cacheFileTypes(event, prop) {
      await this.filter(event, prop);
    }
    clearFileTypeCache() {
      this._fsPathFileTypes.clear();
    }
    unregister(id) {
      super.unregister(id);
      if (this.filterSize() === 0 && this._willListener) {
        this._willListener.dispose();
        this._willListener = undefined;
      }
    }
    clear() {
      super.clear();
      if (this._willListener) {
        this._willListener.dispose();
        this._willListener = undefined;
      }
    }
  }

  class DidCreateFilesFeature extends NotificationFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onDidCreateFiles, proto.DidCreateFilesNotification.type, "didCreate", "didCreate", (i) => i, client.code2ProtocolConverter.asDidCreateFilesParams);
    }
    doSend(event, next) {
      const middleware = this._client.middleware.workspace;
      return middleware?.didCreateFiles ? middleware.didCreateFiles(event, next) : next(event);
    }
  }
  exports2.DidCreateFilesFeature = DidCreateFilesFeature;

  class DidRenameFilesFeature extends CachingNotificationFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onDidRenameFiles, proto.DidRenameFilesNotification.type, "didRename", "didRename", (i) => i.oldUri, client.code2ProtocolConverter.asDidRenameFilesParams);
    }
    register(data) {
      if (!this._willListener) {
        this._willListener = code.workspace.onWillRenameFiles(this.willRename, this);
      }
      super.register(data);
    }
    willRename(e) {
      e.waitUntil(this.cacheFileTypes(e, (i) => i.oldUri));
    }
    doSend(event, next) {
      this.clearFileTypeCache();
      const middleware = this._client.middleware.workspace;
      return middleware?.didRenameFiles ? middleware.didRenameFiles(event, next) : next(event);
    }
  }
  exports2.DidRenameFilesFeature = DidRenameFilesFeature;

  class DidDeleteFilesFeature extends CachingNotificationFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onDidDeleteFiles, proto.DidDeleteFilesNotification.type, "didDelete", "didDelete", (i) => i, client.code2ProtocolConverter.asDidDeleteFilesParams);
    }
    register(data) {
      if (!this._willListener) {
        this._willListener = code.workspace.onWillDeleteFiles(this.willDelete, this);
      }
      super.register(data);
    }
    willDelete(e) {
      e.waitUntil(this.cacheFileTypes(e, (i) => i));
    }
    doSend(event, next) {
      this.clearFileTypeCache();
      const middleware = this._client.middleware.workspace;
      return middleware?.didDeleteFiles ? middleware.didDeleteFiles(event, next) : next(event);
    }
  }
  exports2.DidDeleteFilesFeature = DidDeleteFilesFeature;

  class RequestFileOperationFeature extends FileOperationFeature {
    _requestType;
    _accessUri;
    _createParams;
    constructor(client, event, requestType, clientCapability, serverCapability, accessUri, createParams) {
      super(client, event, requestType, clientCapability, serverCapability);
      this._requestType = requestType;
      this._accessUri = accessUri;
      this._createParams = createParams;
    }
    async send(originalEvent) {
      const waitUntil = this.waitUntil(originalEvent);
      originalEvent.waitUntil(waitUntil);
    }
    async waitUntil(originalEvent) {
      const filteredEvent = await this.filter(originalEvent, this._accessUri);
      if (filteredEvent.files.length) {
        const next = (event) => {
          return this._client.sendRequest(this._requestType, this._createParams(event), event.token).then(this._client.protocol2CodeConverter.asWorkspaceEdit);
        };
        return this.doSend(filteredEvent, next);
      } else {
        return;
      }
    }
  }

  class WillCreateFilesFeature extends RequestFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onWillCreateFiles, proto.WillCreateFilesRequest.type, "willCreate", "willCreate", (i) => i, client.code2ProtocolConverter.asWillCreateFilesParams);
    }
    doSend(event, next) {
      const middleware = this._client.middleware.workspace;
      return middleware?.willCreateFiles ? middleware.willCreateFiles(event, next) : next(event);
    }
  }
  exports2.WillCreateFilesFeature = WillCreateFilesFeature;

  class WillRenameFilesFeature extends RequestFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onWillRenameFiles, proto.WillRenameFilesRequest.type, "willRename", "willRename", (i) => i.oldUri, client.code2ProtocolConverter.asWillRenameFilesParams);
    }
    doSend(event, next) {
      const middleware = this._client.middleware.workspace;
      return middleware?.willRenameFiles ? middleware.willRenameFiles(event, next) : next(event);
    }
  }
  exports2.WillRenameFilesFeature = WillRenameFilesFeature;

  class WillDeleteFilesFeature extends RequestFileOperationFeature {
    constructor(client) {
      super(client, code.workspace.onWillDeleteFiles, proto.WillDeleteFilesRequest.type, "willDelete", "willDelete", (i) => i, client.code2ProtocolConverter.asWillDeleteFilesParams);
    }
    doSend(event, next) {
      const middleware = this._client.middleware.workspace;
      return middleware?.willDeleteFiles ? middleware.willDeleteFiles(event, next) : next(event);
    }
  }
  exports2.WillDeleteFilesFeature = WillDeleteFilesFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/inlineCompletion.js
var require_inlineCompletion = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.InlineCompletionItemFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class InlineCompletionItemFeature extends features_1.TextDocumentLanguageFeature {
    constructor(client) {
      super(client, vscode_languageserver_protocol_1.InlineCompletionRequest.type);
    }
    fillClientCapabilities(capabilities) {
      const inlineCompletion = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "textDocument"), "inlineCompletion");
      inlineCompletion.dynamicRegistration = true;
    }
    initialize(capabilities, documentSelector) {
      const options = this.getRegistrationOptions(documentSelector, capabilities.inlineCompletionProvider);
      if (!options) {
        return;
      }
      this.register({
        id: UUID.generateUuid(),
        registerOptions: options
      });
    }
    registerLanguageProvider(options) {
      const selector = options.documentSelector;
      const provider = {
        provideInlineCompletionItems: (document, position, context, token) => {
          const client = this._client;
          const middleware = this._client.middleware;
          const provideInlineCompletionItems = (document2, position2, context2, token2) => {
            return client.sendRequest(vscode_languageserver_protocol_1.InlineCompletionRequest.type, client.code2ProtocolConverter.asInlineCompletionParams(document2, position2, context2), token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return client.protocol2CodeConverter.asInlineCompletionResult(result, token2);
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.InlineCompletionRequest.type, token2, error, null);
            });
          };
          return middleware.provideInlineCompletionItems ? middleware.provideInlineCompletionItems(document, position, context, token, provideInlineCompletionItems) : provideInlineCompletionItems(document, position, context, token);
        }
      };
      return [vscode_1.languages.registerInlineCompletionItemProvider(this._client.protocol2CodeConverter.asDocumentSelector(selector), provider), provider];
    }
  }
  exports2.InlineCompletionItemFeature = InlineCompletionItemFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/textDocumentContent.js
var require_textDocumentContent = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.TextDocumentContentFeature = undefined;
  var vscode = __importStar(require("vscode"));
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();
  var UUID = __importStar(require_uuid());

  class TextDocumentContentFeature {
    _client;
    _registrations = new Map;
    constructor(client) {
      this._client = client;
    }
    getState() {
      const registrations = this._registrations.size > 0;
      return { kind: "workspace", id: vscode_languageserver_protocol_1.TextDocumentContentRequest.method, registrations };
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.TextDocumentContentRequest.type;
    }
    getProviders() {
      const result = [];
      for (const registration of this._registrations.values()) {
        result.push(...registration.providers);
      }
      return result;
    }
    fillClientCapabilities(capabilities) {
      const textDocumentContent = (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "textDocumentContent");
      textDocumentContent.dynamicRegistration = true;
    }
    initialize(capabilities) {
      const client = this._client;
      client.onRequest(vscode_languageserver_protocol_1.TextDocumentContentRefreshRequest.type, async (params) => {
        const uri = client.protocol2CodeConverter.asUri(params.uri);
        for (const registrations of this._registrations.values()) {
          for (const provider of registrations.providers) {
            if (provider.scheme === uri.scheme) {
              provider.onDidChangeEmitter.fire(uri);
            }
          }
        }
      });
      if (!capabilities?.workspace?.textDocumentContent) {
        return;
      }
      const capability = capabilities.workspace.textDocumentContent;
      const id = vscode_languageserver_protocol_1.StaticRegistrationOptions.hasId(capability) ? capability.id : UUID.generateUuid();
      this.register({
        id,
        registerOptions: capability
      });
    }
    register(data) {
      const registrations = [];
      const disposables = [];
      for (const scheme of data.registerOptions.schemes) {
        const [disposable, registration] = this.registerTextDocumentContentProvider(scheme);
        registrations.push(registration);
        disposables.push(disposable);
      }
      this._registrations.set(data.id, { disposable: vscode.Disposable.from(...disposables), providers: registrations });
    }
    registerTextDocumentContentProvider(scheme) {
      const eventEmitter = new vscode.EventEmitter;
      const provider = {
        onDidChange: eventEmitter.event,
        provideTextDocumentContent: (uri, token) => {
          const client = this._client;
          const provideTextDocumentContent = (uri2, token2) => {
            const params = {
              uri: client.code2ProtocolConverter.asUri(uri2)
            };
            return client.sendRequest(vscode_languageserver_protocol_1.TextDocumentContentRequest.type, params, token2).then((result) => {
              if (token2.isCancellationRequested) {
                return null;
              }
              return result.text;
            }, (error) => {
              return client.handleFailedRequest(vscode_languageserver_protocol_1.TextDocumentContentRequest.type, token2, error, null);
            });
          };
          const middleware = client.middleware;
          return middleware.provideTextDocumentContent ? middleware.provideTextDocumentContent(uri, token, provideTextDocumentContent) : provideTextDocumentContent(uri, token);
        }
      };
      return [vscode.workspace.registerTextDocumentContentProvider(scheme, provider), { scheme, onDidChangeEmitter: eventEmitter, provider }];
    }
    unregister(id) {
      const registration = this._registrations.get(id);
      if (registration !== undefined) {
        this._registrations.delete(id);
        registration.disposable.dispose();
      }
    }
    clear() {
      this._registrations.forEach((registration) => {
        registration.disposable.dispose();
      });
      this._registrations.clear();
    }
  }
  exports2.TextDocumentContentFeature = TextDocumentContentFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/fileSystemWatcher.js
var require_fileSystemWatcher = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.FileSystemWatcherFeature = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var features_1 = require_features();

  class FileSystemWatcherFeature {
    _client;
    _notifyFileEvent;
    _watchers;
    constructor(client, notifyFileEvent) {
      this._client = client;
      this._notifyFileEvent = notifyFileEvent;
      this._watchers = new Map;
    }
    getState() {
      return { kind: "workspace", id: this.registrationType.method, registrations: this._watchers.size > 0 };
    }
    get registrationType() {
      return vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type;
    }
    fillClientCapabilities(capabilities) {
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "didChangeWatchedFiles").dynamicRegistration = true;
      (0, features_1.ensure)((0, features_1.ensure)(capabilities, "workspace"), "didChangeWatchedFiles").relativePatternSupport = true;
    }
    initialize(_capabilities, _documentSelector) {}
    register(data) {
      if (!Array.isArray(data.registerOptions.watchers)) {
        return;
      }
      const disposables = [];
      for (const watcher of data.registerOptions.watchers) {
        const globPattern = this._client.protocol2CodeConverter.asGlobPattern(watcher.globPattern);
        if (globPattern === undefined) {
          continue;
        }
        let watchCreate = true, watchChange = true, watchDelete = true;
        if (watcher.kind !== undefined && watcher.kind !== null) {
          watchCreate = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Create) !== 0;
          watchChange = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Change) !== 0;
          watchDelete = (watcher.kind & vscode_languageserver_protocol_1.WatchKind.Delete) !== 0;
        }
        const fileSystemWatcher = vscode_1.workspace.createFileSystemWatcher(globPattern, !watchCreate, !watchChange, !watchDelete);
        this.hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, disposables);
        disposables.push(fileSystemWatcher);
      }
      this._watchers.set(data.id, disposables);
    }
    registerRaw(id, fileSystemWatchers) {
      const disposables = [];
      for (const fileSystemWatcher of fileSystemWatchers) {
        this.hookListeners(fileSystemWatcher, true, true, true, disposables);
      }
      this._watchers.set(id, disposables);
    }
    hookListeners(fileSystemWatcher, watchCreate, watchChange, watchDelete, listeners) {
      if (watchCreate) {
        fileSystemWatcher.onDidCreate((resource) => this._notifyFileEvent({
          uri: this._client.code2ProtocolConverter.asUri(resource),
          type: vscode_languageserver_protocol_1.FileChangeType.Created
        }), null, listeners);
      }
      if (watchChange) {
        fileSystemWatcher.onDidChange((resource) => this._notifyFileEvent({
          uri: this._client.code2ProtocolConverter.asUri(resource),
          type: vscode_languageserver_protocol_1.FileChangeType.Changed
        }), null, listeners);
      }
      if (watchDelete) {
        fileSystemWatcher.onDidDelete((resource) => this._notifyFileEvent({
          uri: this._client.code2ProtocolConverter.asUri(resource),
          type: vscode_languageserver_protocol_1.FileChangeType.Deleted
        }), null, listeners);
      }
    }
    unregister(id) {
      const disposables = this._watchers.get(id);
      if (disposables) {
        this._watchers.delete(id);
        for (const disposable of disposables) {
          disposable.dispose();
        }
      }
    }
    clear() {
      this._watchers.forEach((disposables) => {
        for (const disposable of disposables) {
          disposable.dispose();
        }
      });
      this._watchers.clear();
    }
  }
  exports2.FileSystemWatcherFeature = FileSystemWatcherFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/progress.js
var require_progress = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ProgressFeature = undefined;
  var vscode_languageserver_protocol_1 = require_api2();
  var progressPart_1 = require_progressPart();
  function ensure(target, key) {
    if (target[key] === undefined) {
      target[key] = Object.create(null);
    }
    return target[key];
  }

  class ProgressFeature {
    _client;
    activeParts;
    constructor(_client) {
      this._client = _client;
      this.activeParts = new Set;
    }
    getState() {
      return { kind: "window", id: vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.method, registrations: this.activeParts.size > 0 };
    }
    fillClientCapabilities(capabilities) {
      ensure(capabilities, "window").workDoneProgress = true;
    }
    initialize() {
      const client = this._client;
      const deleteHandler = (part) => {
        this.activeParts.delete(part);
      };
      const createHandler = (params) => {
        this.activeParts.add(new progressPart_1.ProgressPart(this._client, params.token, deleteHandler));
      };
      client.onRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, createHandler);
    }
    clear() {
      for (const part of this.activeParts) {
        part.done();
      }
      this.activeParts.clear();
    }
  }
  exports2.ProgressFeature = ProgressFeature;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/client.js
var require_client = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.ProposedFeatures = exports2.LanguageClient = exports2.BaseLanguageClient = exports2.ShutdownMode = exports2.MessageTransports = exports2.SuspendMode = exports2.State = exports2.CloseAction = exports2.ErrorAction = exports2.RevealOutputChannelOn = undefined;
  var vscode_1 = require("vscode");
  var vscode_languageserver_protocol_1 = require_api2();
  var c2p = __importStar(require_codeConverter());
  var p2c = __importStar(require_protocolConverter());
  var Is = __importStar(require_is());
  var async_1 = require_async();
  var UUID = __importStar(require_uuid());
  var progressPart_1 = require_progressPart();
  var features_1 = require_features();
  var diagnostic_1 = require_diagnostic();
  var notebook_1 = require_notebook();
  var configuration_1 = require_configuration();
  var textSynchronization_1 = require_textSynchronization();
  var completion_1 = require_completion();
  var hover_1 = require_hover();
  var definition_1 = require_definition();
  var signatureHelp_1 = require_signatureHelp();
  var documentHighlight_1 = require_documentHighlight();
  var documentSymbol_1 = require_documentSymbol();
  var workspaceSymbol_1 = require_workspaceSymbol();
  var reference_1 = require_reference();
  var typeDefinition_1 = require_typeDefinition();
  var implementation_1 = require_implementation();
  var colorProvider_1 = require_colorProvider();
  var codeAction_1 = require_codeAction();
  var codeLens_1 = require_codeLens();
  var formatting_1 = require_formatting();
  var rename_1 = require_rename();
  var documentLink_1 = require_documentLink();
  var executeCommand_1 = require_executeCommand();
  var foldingRange_1 = require_foldingRange();
  var declaration_1 = require_declaration();
  var selectionRange_1 = require_selectionRange();
  var callHierarchy_1 = require_callHierarchy();
  var semanticTokens_1 = require_semanticTokens();
  var linkedEditingRange_1 = require_linkedEditingRange();
  var typeHierarchy_1 = require_typeHierarchy();
  var inlineValue_1 = require_inlineValue();
  var inlayHint_1 = require_inlayHint();
  var workspaceFolder_1 = require_workspaceFolder();
  var fileOperations_1 = require_fileOperations();
  var inlineCompletion_1 = require_inlineCompletion();
  var textDocumentContent_1 = require_textDocumentContent();
  var fileSystemWatcher_1 = require_fileSystemWatcher();
  var progress_1 = require_progress();
  var RevealOutputChannelOn;
  (function(RevealOutputChannelOn2) {
    RevealOutputChannelOn2[RevealOutputChannelOn2["Debug"] = 0] = "Debug";
    RevealOutputChannelOn2[RevealOutputChannelOn2["Info"] = 1] = "Info";
    RevealOutputChannelOn2[RevealOutputChannelOn2["Warn"] = 2] = "Warn";
    RevealOutputChannelOn2[RevealOutputChannelOn2["Error"] = 3] = "Error";
    RevealOutputChannelOn2[RevealOutputChannelOn2["Never"] = 4] = "Never";
  })(RevealOutputChannelOn || (exports2.RevealOutputChannelOn = RevealOutputChannelOn = {}));
  var ErrorAction;
  (function(ErrorAction2) {
    ErrorAction2[ErrorAction2["Continue"] = 1] = "Continue";
    ErrorAction2[ErrorAction2["Shutdown"] = 2] = "Shutdown";
  })(ErrorAction || (exports2.ErrorAction = ErrorAction = {}));
  var CloseAction;
  (function(CloseAction2) {
    CloseAction2[CloseAction2["DoNotRestart"] = 1] = "DoNotRestart";
    CloseAction2[CloseAction2["Restart"] = 2] = "Restart";
  })(CloseAction || (exports2.CloseAction = CloseAction = {}));
  var State;
  (function(State2) {
    State2[State2["Stopped"] = 1] = "Stopped";
    State2[State2["Starting"] = 3] = "Starting";
    State2[State2["StartFailed"] = 4] = "StartFailed";
    State2[State2["Running"] = 2] = "Running";
  })(State || (exports2.State = State = {}));
  var SuspendMode;
  (function(SuspendMode2) {
    SuspendMode2["off"] = "off";
    SuspendMode2["on"] = "on";
  })(SuspendMode || (exports2.SuspendMode = SuspendMode = {}));
  var ResolvedClientOptions;
  (function(ResolvedClientOptions2) {
    function sanitizeIsTrusted(isTrusted) {
      if (isTrusted === undefined || isTrusted === null) {
        return false;
      }
      if (typeof isTrusted === "boolean" || typeof isTrusted === "object" && isTrusted !== null && Is.stringArray(isTrusted.enabledCommands)) {
        return isTrusted;
      }
      return false;
    }
    ResolvedClientOptions2.sanitizeIsTrusted = sanitizeIsTrusted;
  })(ResolvedClientOptions || (ResolvedClientOptions = {}));

  class DefaultErrorHandler {
    client;
    maxRestartCount;
    restarts;
    constructor(client, maxRestartCount) {
      this.client = client;
      this.maxRestartCount = maxRestartCount;
      this.restarts = [];
    }
    error(_error, _message, count) {
      if (count && count <= 3) {
        return { action: ErrorAction.Continue };
      }
      return { action: ErrorAction.Shutdown };
    }
    closed() {
      this.restarts.push(Date.now());
      if (this.restarts.length <= this.maxRestartCount) {
        return { action: CloseAction.Restart };
      } else {
        const diff = this.restarts[this.restarts.length - 1] - this.restarts[0];
        if (diff <= 3 * 60 * 1000) {
          return { action: CloseAction.DoNotRestart, message: `The ${this.client.name} server crashed ${this.maxRestartCount + 1} times in the last 3 minutes. The server will not be restarted. See the output for more information.` };
        } else {
          this.restarts.shift();
          return { action: CloseAction.Restart };
        }
      }
    }
  }
  var ClientState;
  (function(ClientState2) {
    ClientState2["Initial"] = "initial";
    ClientState2["Starting"] = "starting";
    ClientState2["StartFailed"] = "startFailed";
    ClientState2["Running"] = "running";
    ClientState2["Stopping"] = "stopping";
    ClientState2["Stopped"] = "stopped";
  })(ClientState || (ClientState = {}));
  var MessageTransports;
  (function(MessageTransports2) {
    function is(value) {
      const candidate = value;
      return candidate && vscode_languageserver_protocol_1.MessageReader.is(value.reader) && vscode_languageserver_protocol_1.MessageWriter.is(value.writer);
    }
    MessageTransports2.is = is;
  })(MessageTransports || (exports2.MessageTransports = MessageTransports = {}));
  var ShutdownMode;
  (function(ShutdownMode2) {
    ShutdownMode2["Restart"] = "restart";
    ShutdownMode2["Stop"] = "stop";
  })(ShutdownMode || (exports2.ShutdownMode = ShutdownMode = {}));

  class VisibleDocumentsImpl {
    open;
    _onOpen;
    _onClose;
    disposables;
    constructor() {
      this.disposables = [];
      this.open = new Set;
      this._onOpen = new vscode_1.EventEmitter;
      this._onClose = new vscode_1.EventEmitter;
      VisibleDocumentsImpl.fillVisibleResources(this.open);
      const updateVisibleDocuments = () => {
        const oldTabs = this.open;
        const currentTabs = new Set;
        VisibleDocumentsImpl.fillVisibleResources(currentTabs);
        const closed = new Set;
        const opened = new Set(currentTabs);
        for (const tab of oldTabs.values()) {
          if (currentTabs.has(tab)) {
            opened.delete(tab);
          } else {
            closed.add(tab);
          }
        }
        this.open = currentTabs;
        if (closed.size > 0) {
          const toFire = new Set;
          for (const item of closed) {
            toFire.add(vscode_1.Uri.parse(item));
          }
          this._onClose.fire(toFire);
        }
        if (opened.size > 0) {
          const toFire = new Set;
          for (const item of opened) {
            toFire.add(vscode_1.Uri.parse(item));
          }
          this._onOpen.fire(toFire);
        }
      };
      this.disposables.push(vscode_1.window.tabGroups.onDidChangeTabs((event) => {
        if (event.closed.length === 0 && event.opened.length === 0) {
          return;
        }
        updateVisibleDocuments();
      }));
      this.disposables.push(vscode_1.window.onDidChangeVisibleTextEditors((_editors) => {
        updateVisibleDocuments();
      }));
    }
    get onClose() {
      return this._onClose.event;
    }
    get onOpen() {
      return this._onOpen.event;
    }
    dispose() {
      this.disposables.forEach((disposable) => disposable.dispose());
    }
    isActive(document) {
      return document instanceof vscode_1.Uri ? vscode_1.window.activeTextEditor?.document.uri === document : vscode_1.window.activeTextEditor?.document === document;
    }
    isVisible(document) {
      const uri = document instanceof vscode_1.Uri ? document : document.uri;
      if (uri.scheme === notebook_1.NotebookDocumentSyncFeature.CellScheme) {
        return vscode_1.workspace.notebookDocuments.some((notebook) => {
          if (this.open.has(notebook.uri.toString())) {
            const cell = notebook.getCells().find((cell2) => cell2.document.uri.toString() === uri.toString());
            return cell !== undefined;
          }
          return false;
        });
      }
      return this.open.has(uri.toString());
    }
    getResources() {
      const result = new Set;
      VisibleDocumentsImpl.fillVisibleResources(new Set, result);
      return result;
    }
    static fillVisibleResources(strings, uris) {
      const seen = strings ?? new Set;
      for (const group of vscode_1.window.tabGroups.all) {
        for (const tab of group.tabs) {
          const input = tab.input;
          let uri;
          if (input instanceof vscode_1.TabInputText) {
            uri = input.uri;
          } else if (input instanceof vscode_1.TabInputTextDiff) {
            uri = input.modified;
          } else if (input instanceof vscode_1.TabInputCustom) {
            uri = input.uri;
          } else if (input instanceof vscode_1.TabInputNotebook) {
            uri = input.uri;
          }
          if (uri !== undefined && !seen.has(uri.toString())) {
            seen.add(uri.toString());
            uris !== undefined && uris.add(uri);
          }
        }
      }
      for (const editor of vscode_1.window.visibleTextEditors) {
        const uri = editor.document.uri;
        if (!seen.has(uri.toString())) {
          seen.add(uri.toString());
          uris !== undefined && uris.add(uri);
        }
      }
    }
  }

  class BaseLanguageClient {
    _id;
    _name;
    _clientOptions;
    _state;
    _onStart;
    _onStop;
    _connection;
    _idleInterval;
    _ignoredRegistrations;
    _listeners;
    _disposed;
    _notificationHandlers;
    _notificationDisposables;
    _pendingNotificationHandlers;
    _requestHandlers;
    _requestDisposables;
    _pendingRequestHandlers;
    _progressHandlers;
    _pendingProgressHandlers;
    _progressDisposables;
    _initializeResult;
    _outputChannel;
    _disposeOutputChannel;
    _traceOutputChannel;
    _traceLogLevel;
    _capabilities;
    _diagnostics;
    _syncedDocuments;
    _didChangeTextDocumentFeature;
    _inFlightOpenNotifications;
    _pendingChangeSemaphore;
    _pendingChangeDelayer;
    _didOpenTextDocumentFeature;
    _fileEvents;
    _fileEventDelayer;
    _telemetryEmitter;
    _stateChangeEmitter;
    _trace;
    _traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
    _tracer;
    _c2p;
    _p2c;
    _visibleDocuments;
    constructor(id, name, clientOptions) {
      this._id = id;
      this._name = name;
      clientOptions = clientOptions || {};
      const markdown = {
        isTrusted: false,
        supportHtml: false,
        supportThemeIcons: false
      };
      if (clientOptions.markdown !== undefined) {
        markdown.isTrusted = ResolvedClientOptions.sanitizeIsTrusted(clientOptions.markdown.isTrusted);
        markdown.supportHtml = clientOptions.markdown.supportHtml === true;
        markdown.supportThemeIcons = clientOptions.markdown.supportThemeIcons === true;
      }
      this._clientOptions = {
        documentSelector: clientOptions.documentSelector ?? [],
        synchronize: clientOptions.synchronize ?? {},
        diagnosticCollectionName: clientOptions.diagnosticCollectionName,
        outputChannelName: clientOptions.outputChannelName ?? this._name,
        revealOutputChannelOn: clientOptions.revealOutputChannelOn ?? RevealOutputChannelOn.Error,
        stdioEncoding: clientOptions.stdioEncoding ?? "utf8",
        initializationOptions: clientOptions.initializationOptions,
        initializationFailedHandler: clientOptions.initializationFailedHandler,
        progressOnInitialization: !!clientOptions.progressOnInitialization,
        errorHandler: clientOptions.errorHandler ?? this.createDefaultErrorHandler(clientOptions.connectionOptions?.maxRestartCount),
        middleware: clientOptions.middleware ?? {},
        uriConverters: clientOptions.uriConverters,
        workspaceFolder: clientOptions.workspaceFolder,
        connectionOptions: clientOptions.connectionOptions,
        markdown,
        diagnosticPullOptions: clientOptions.diagnosticPullOptions ?? { onChange: true, onSave: false },
        diagnosticCollectionProvider: clientOptions.diagnosticCollectionProvider ?? new features_1.DefaultDiagnosticCollectionProvider,
        notebookDocumentOptions: clientOptions.notebookDocumentOptions ?? {},
        textSynchronization: this.createTextSynchronizationOptions(clientOptions.textSynchronization)
      };
      this._clientOptions.synchronize = this._clientOptions.synchronize || {};
      this._state = ClientState.Initial;
      this._ignoredRegistrations = new Set;
      this._listeners = [];
      this._notificationHandlers = new Map;
      this._pendingNotificationHandlers = new Map;
      this._notificationDisposables = new Map;
      this._requestHandlers = new Map;
      this._pendingRequestHandlers = new Map;
      this._requestDisposables = new Map;
      this._progressHandlers = new Map;
      this._pendingProgressHandlers = new Map;
      this._progressDisposables = new Map;
      this._connection = undefined;
      this._initializeResult = undefined;
      if (clientOptions.outputChannel) {
        this._outputChannel = clientOptions.outputChannel;
        this._disposeOutputChannel = false;
        this._traceLogLevel = this._outputChannel.logLevel;
      } else {
        this._outputChannel = undefined;
        this._disposeOutputChannel = true;
        this._traceLogLevel = vscode_1.LogLevel.Info;
      }
      this._traceOutputChannel = clientOptions.traceOutputChannel;
      if (this._traceOutputChannel !== undefined) {
        this._traceLogLevel = this._traceOutputChannel.logLevel;
      }
      this._diagnostics = undefined;
      this._inFlightOpenNotifications = new Set;
      this._pendingChangeSemaphore = new async_1.Semaphore(1);
      this._pendingChangeDelayer = new async_1.Delayer(250);
      this._fileEvents = [];
      this._fileEventDelayer = new async_1.Delayer(250);
      this._onStop = undefined;
      this._telemetryEmitter = new vscode_languageserver_protocol_1.Emitter;
      this._stateChangeEmitter = new vscode_languageserver_protocol_1.Emitter;
      this._trace = vscode_languageserver_protocol_1.Trace.Off;
      this._tracer = {
        log: (messageOrDataObject, data) => {
          if (Is.string(messageOrDataObject)) {
            this.trace(messageOrDataObject, data);
          } else {
            this.traceObject(messageOrDataObject);
          }
        }
      };
      this._c2p = c2p.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.code2Protocol : undefined);
      this._p2c = p2c.createConverter(clientOptions.uriConverters ? clientOptions.uriConverters.protocol2Code : undefined, this._clientOptions.markdown.isTrusted, this._clientOptions.markdown.supportHtml, this._clientOptions.markdown.supportThemeIcons);
      this._syncedDocuments = new Map;
      this.registerBuiltinFeatures();
    }
    createTextSynchronizationOptions(options) {
      if (!options) {
        return { delayOpenNotifications: false };
      }
      if (typeof options.delayOpenNotifications === "boolean") {
        return { delayOpenNotifications: options.delayOpenNotifications };
      }
      return { delayOpenNotifications: false };
    }
    get name() {
      return this._name;
    }
    get middleware() {
      return this._clientOptions.middleware ?? Object.create(null);
    }
    get clientOptions() {
      return this._clientOptions;
    }
    get protocol2CodeConverter() {
      return this._p2c;
    }
    get code2ProtocolConverter() {
      return this._c2p;
    }
    get visibleDocuments() {
      if (this._visibleDocuments === undefined) {
        this._visibleDocuments = new VisibleDocumentsImpl;
      }
      return this._visibleDocuments;
    }
    get onTelemetry() {
      return this._telemetryEmitter.event;
    }
    get onDidChangeState() {
      return this._stateChangeEmitter.event;
    }
    get outputChannel() {
      if (!this._outputChannel) {
        this._outputChannel = vscode_1.window.createOutputChannel(this._clientOptions.outputChannelName ? this._clientOptions.outputChannelName : this._name, { log: true });
        if (this._traceOutputChannel === undefined) {
          this._traceLogLevel = this._outputChannel.logLevel;
        }
      }
      return this._outputChannel;
    }
    get traceOutputChannel() {
      return this._traceOutputChannel ? this._traceOutputChannel : this.outputChannel;
    }
    get diagnostics() {
      if (this._diagnostics === null) {
        return;
      }
      if (this._diagnostics === undefined) {
        this._diagnostics = this._clientOptions.diagnosticCollectionProvider.create(this._clientOptions.diagnosticCollectionName ?? this._id, features_1.DiagnosticCollectionSource.push);
      }
      return this._diagnostics;
    }
    get state() {
      return this.getPublicState();
    }
    get $state() {
      return this._state;
    }
    set $state(value) {
      const oldState = this.getPublicState();
      this._state = value;
      const newState = this.getPublicState();
      if (newState !== oldState) {
        this._stateChangeEmitter.fire({ oldState, newState });
      }
    }
    getPublicState() {
      switch (this.$state) {
        case ClientState.Starting:
          return State.Starting;
        case ClientState.Running:
          return State.Running;
        case ClientState.StartFailed:
          return State.StartFailed;
        default:
          return State.Stopped;
      }
    }
    get initializeResult() {
      return this._initializeResult;
    }
    async sendRequest(type, ...params) {
      if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {
        return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));
      }
      const connection = await this.$start();
      await this._didOpenTextDocumentFeature.sendPendingOpenNotifications();
      if (this._didChangeTextDocumentFeature.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full) {
        await this.sendPendingFullTextDocumentChanges(connection);
      }
      let param = undefined;
      let token = undefined;
      if (params.length === 1) {
        if (vscode_languageserver_protocol_1.CancellationToken.is(params[0])) {
          token = params[0];
        } else {
          param = params[0];
        }
      } else if (params.length === 2) {
        param = params[0];
        token = params[1];
      }
      if (token !== undefined && token.isCancellationRequested) {
        return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.LSPErrorCodes.RequestCancelled, "Request got cancelled"));
      }
      const _sendRequest = this._clientOptions.middleware?.sendRequest;
      if (_sendRequest !== undefined) {
        return _sendRequest(type, param, token, (type2, param2, token2) => {
          const params2 = [];
          if (param2 !== undefined) {
            params2.push(param2);
          }
          if (token2 !== undefined) {
            params2.push(token2);
          }
          return connection.sendRequest(type2, ...params2);
        });
      } else {
        return connection.sendRequest(type, ...params);
      }
    }
    onRequest(type, handler) {
      const method = typeof type === "string" ? type : type.method;
      this._requestHandlers.set(method, handler);
      const connection = this.activeConnection();
      let disposable;
      if (connection !== undefined) {
        this._requestDisposables.set(method, connection.onRequest(type, handler));
        disposable = {
          dispose: () => {
            const disposable2 = this._requestDisposables.get(method);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._requestDisposables.delete(method);
            }
          }
        };
      } else {
        this._pendingRequestHandlers.set(method, handler);
        disposable = {
          dispose: () => {
            this._pendingRequestHandlers.delete(method);
            const disposable2 = this._requestDisposables.get(method);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._requestDisposables.delete(method);
            }
          }
        };
      }
      return {
        dispose: () => {
          this._requestHandlers.delete(method);
          disposable.dispose();
        }
      };
    }
    async sendNotification(type, params) {
      if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {
        return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));
      }
      const needsPendingFullTextDocumentSync = this._didChangeTextDocumentFeature.syncKind === vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
      let openNotification;
      if (needsPendingFullTextDocumentSync && typeof type !== "string" && type.method === vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.method) {
        openNotification = params?.textDocument.uri;
        this._inFlightOpenNotifications.add(openNotification);
      }
      let documentToClose;
      if (typeof type !== "string" && type.method === vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.method) {
        documentToClose = params.textDocument.uri;
      }
      const connection = await this.$start();
      const didDropOpenNotification = await this._didOpenTextDocumentFeature.sendPendingOpenNotifications(documentToClose);
      if (didDropOpenNotification) {
        return;
      }
      if (needsPendingFullTextDocumentSync) {
        await this.sendPendingFullTextDocumentChanges(connection);
      }
      if (openNotification !== undefined) {
        this._inFlightOpenNotifications.delete(openNotification);
      }
      const _sendNotification = this._clientOptions.middleware?.sendNotification;
      return _sendNotification ? _sendNotification(type, connection.sendNotification.bind(connection), params) : connection.sendNotification(type, params);
    }
    onNotification(type, handler) {
      const method = typeof type === "string" ? type : type.method;
      this._notificationHandlers.set(method, handler);
      const connection = this.activeConnection();
      let disposable;
      if (connection !== undefined) {
        this._notificationDisposables.set(method, connection.onNotification(type, handler));
        disposable = {
          dispose: () => {
            const disposable2 = this._notificationDisposables.get(method);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._notificationDisposables.delete(method);
            }
          }
        };
      } else {
        this._pendingNotificationHandlers.set(method, handler);
        disposable = {
          dispose: () => {
            this._pendingNotificationHandlers.delete(method);
            const disposable2 = this._notificationDisposables.get(method);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._notificationDisposables.delete(method);
            }
          }
        };
      }
      return {
        dispose: () => {
          this._notificationHandlers.delete(method);
          disposable.dispose();
        }
      };
    }
    async sendProgress(type, token, value) {
      if (this.$state === ClientState.StartFailed || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped) {
        return Promise.reject(new vscode_languageserver_protocol_1.ResponseError(vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive, `Client is not running`));
      }
      try {
        const connection = await this.$start();
        return connection.sendProgress(type, token, value);
      } catch (error) {
        this.error(`Sending progress for token ${token} failed.`, error);
        throw error;
      }
    }
    onProgress(type, token, handler) {
      this._progressHandlers.set(token, { type, handler });
      const connection = this.activeConnection();
      let disposable;
      const handleWorkDoneProgress = this._clientOptions.middleware?.handleWorkDoneProgress;
      const realHandler = vscode_languageserver_protocol_1.WorkDoneProgress.is(type) && handleWorkDoneProgress !== undefined ? (params) => {
        handleWorkDoneProgress(token, params, () => handler(params));
      } : handler;
      if (connection !== undefined) {
        this._progressDisposables.set(token, connection.onProgress(type, token, realHandler));
        disposable = {
          dispose: () => {
            const disposable2 = this._progressDisposables.get(token);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._progressDisposables.delete(token);
            }
          }
        };
      } else {
        this._pendingProgressHandlers.set(token, { type, handler });
        disposable = {
          dispose: () => {
            this._pendingProgressHandlers.delete(token);
            const disposable2 = this._progressDisposables.get(token);
            if (disposable2 !== undefined) {
              disposable2.dispose();
              this._progressDisposables.delete(token);
            }
          }
        };
      }
      return {
        dispose: () => {
          this._progressHandlers.delete(token);
          disposable.dispose();
        }
      };
    }
    createDefaultErrorHandler(maxRestartCount) {
      if (maxRestartCount !== undefined && maxRestartCount < 0) {
        throw new Error(`Invalid maxRestartCount: ${maxRestartCount}`);
      }
      return new DefaultErrorHandler(this, maxRestartCount ?? 4);
    }
    async setTrace(value) {
      this._trace = value;
      const connection = this.activeConnection();
      if (connection !== undefined) {
        await connection.trace(this._trace, this._tracer, {
          sendNotification: false,
          traceFormat: this._traceFormat
        });
      }
    }
    data2String(data) {
      if (data instanceof vscode_languageserver_protocol_1.ResponseError) {
        const responseError = data;
        return `  Message: ${responseError.message}
  Code: ${responseError.code} ${responseError.data ? `
` + responseError.data.toString() : ""}`;
      }
      if (data instanceof Error) {
        if (Is.string(data.stack)) {
          return data.stack;
        }
        return data.message;
      }
      if (Is.string(data)) {
        return data;
      }
      return data.toString();
    }
    shouldLogToOutputChannel() {
      if (this.$state !== ClientState.Stopped) {
        return true;
      }
      return this._outputChannel !== undefined;
    }
    error(message, data, showNotification = true) {
      if (this.shouldLogToOutputChannel()) {
        this.outputChannel.error(this.getLogMessage(message, data));
      }
      if (showNotification === "force" || showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Error) {
        this.showNotificationMessage(vscode_languageserver_protocol_1.MessageType.Error, message, data);
      }
    }
    warn(message, data, showNotification = true) {
      if (this.shouldLogToOutputChannel()) {
        this.outputChannel.warn(this.getLogMessage(message, data));
      }
      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Warn) {
        this.showNotificationMessage(vscode_languageserver_protocol_1.MessageType.Warning, message, data);
      }
    }
    info(message, data, showNotification = true) {
      if (this.shouldLogToOutputChannel()) {
        this.outputChannel.info(this.getLogMessage(message, data));
      }
      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Info) {
        this.showNotificationMessage(vscode_languageserver_protocol_1.MessageType.Info, message, data);
      }
    }
    debug(message, data, showNotification = true) {
      if (this.shouldLogToOutputChannel()) {
        this.outputChannel.debug(this.getLogMessage(message, data));
      }
      if (showNotification && this._clientOptions.revealOutputChannelOn <= RevealOutputChannelOn.Debug) {
        this.showNotificationMessage(vscode_languageserver_protocol_1.MessageType.Debug, message, data);
      }
    }
    trace(message, data) {
      this.traceOutputChannel.trace(this.getLogMessage(message, data));
    }
    traceObject(data) {
      this.traceOutputChannel.trace(JSON.stringify(data));
    }
    showNotificationMessage(type, message, data) {
      message = message ?? "A request has failed. See the output for more information.";
      if (data) {
        message += `
` + this.data2String(data);
      }
      const messageFunc = type === vscode_languageserver_protocol_1.MessageType.Error ? vscode_1.window.showErrorMessage : type === vscode_languageserver_protocol_1.MessageType.Warning ? vscode_1.window.showWarningMessage : vscode_1.window.showInformationMessage;
      messageFunc(message, "Go to output").then((selection) => {
        if (selection !== undefined) {
          this.outputChannel.show(true);
        }
      });
    }
    getLogMessage(message, data) {
      return data !== null && data !== undefined ? `${message}
${this.data2String(data)}` : message;
    }
    needsStart() {
      return this.$state === ClientState.Initial || this.$state === ClientState.Stopping || this.$state === ClientState.Stopped;
    }
    needsStop() {
      return this.$state === ClientState.Starting || this.$state === ClientState.Running;
    }
    activeConnection() {
      return this.$state === ClientState.Running && this._connection !== undefined ? this._connection : undefined;
    }
    isRunning() {
      return this.$state === ClientState.Running;
    }
    async start() {
      if (this._disposed === "disposing" || this._disposed === "disposed") {
        throw new Error(`Client got disposed and can't be restarted.`);
      }
      if (this.$state === ClientState.Stopping) {
        throw new Error(`Client is currently stopping. Can only restart a full stopped client`);
      }
      if (this._onStart !== undefined) {
        return this._onStart;
      }
      const [promise, resolve, reject] = this.createOnStartPromise();
      this._onStart = promise;
      this._diagnostics = undefined;
      for (const [method, handler] of this._notificationHandlers) {
        if (!this._pendingNotificationHandlers.has(method)) {
          this._pendingNotificationHandlers.set(method, handler);
        }
      }
      for (const [method, handler] of this._requestHandlers) {
        if (!this._pendingRequestHandlers.has(method)) {
          this._pendingRequestHandlers.set(method, handler);
        }
      }
      for (const [token, data] of this._progressHandlers) {
        if (!this._pendingProgressHandlers.has(token)) {
          this._pendingProgressHandlers.set(token, data);
        }
      }
      this.$state = ClientState.Starting;
      try {
        const connection = await this.createConnection();
        connection.onNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, (message) => {
          switch (message.type) {
            case vscode_languageserver_protocol_1.MessageType.Error:
              this.error(message.message, undefined, false);
              break;
            case vscode_languageserver_protocol_1.MessageType.Warning:
              this.warn(message.message, undefined, false);
              break;
            case vscode_languageserver_protocol_1.MessageType.Info:
              this.info(message.message, undefined, false);
              break;
            case vscode_languageserver_protocol_1.MessageType.Debug:
              this.debug(message.message, undefined, false);
              break;
            default:
              this.outputChannel.appendLine(message.message);
          }
        });
        connection.onNotification(vscode_languageserver_protocol_1.ShowMessageNotification.type, (message) => {
          switch (message.type) {
            case vscode_languageserver_protocol_1.MessageType.Error:
              vscode_1.window.showErrorMessage(message.message);
              break;
            case vscode_languageserver_protocol_1.MessageType.Warning:
              vscode_1.window.showWarningMessage(message.message);
              break;
            case vscode_languageserver_protocol_1.MessageType.Info:
              vscode_1.window.showInformationMessage(message.message);
              break;
            default:
              vscode_1.window.showInformationMessage(message.message);
          }
        });
        connection.onRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, (params) => {
          let messageFunc;
          switch (params.type) {
            case vscode_languageserver_protocol_1.MessageType.Error:
              messageFunc = vscode_1.window.showErrorMessage;
              break;
            case vscode_languageserver_protocol_1.MessageType.Warning:
              messageFunc = vscode_1.window.showWarningMessage;
              break;
            case vscode_languageserver_protocol_1.MessageType.Info:
              messageFunc = vscode_1.window.showInformationMessage;
              break;
            default:
              messageFunc = vscode_1.window.showInformationMessage;
          }
          const actions = params.actions || [];
          return messageFunc(params.message, ...actions);
        });
        connection.onNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, (data) => {
          this._telemetryEmitter.fire(data);
        });
        connection.onRequest(vscode_languageserver_protocol_1.ShowDocumentRequest.type, async (params, token) => {
          const showDocument = async (params2) => {
            const uri = this.protocol2CodeConverter.asUri(params2.uri);
            try {
              if (params2.external === true) {
                const success = await vscode_1.env.openExternal(uri);
                return { success };
              } else {
                const options = {};
                if (params2.selection !== undefined) {
                  options.selection = this.protocol2CodeConverter.asRange(params2.selection);
                }
                if (params2.takeFocus === undefined || params2.takeFocus === false) {
                  options.preserveFocus = true;
                } else if (params2.takeFocus === true) {
                  options.preserveFocus = false;
                }
                await vscode_1.window.showTextDocument(uri, options);
                return { success: true };
              }
            } catch (error) {
              return { success: false };
            }
          };
          const middleware = this._clientOptions.middleware.window?.showDocument;
          if (middleware !== undefined) {
            return middleware(params, token, showDocument);
          } else {
            return showDocument(params);
          }
        });
        connection.listen();
        await this.initialize(connection);
        resolve();
      } catch (error) {
        this.$state = ClientState.StartFailed;
        this.error(`${this._name} client: couldn't create connection to server.`, error, "force");
        reject(error);
      }
      return this._onStart;
    }
    createOnStartPromise() {
      let resolve;
      let reject;
      const promise = new Promise((_resolve, _reject) => {
        resolve = _resolve;
        reject = _reject;
      });
      return [promise, resolve, reject];
    }
    async initialize(connection) {
      this.refreshTrace(connection, false);
      const initOption = this._clientOptions.initializationOptions;
      const [rootPath, workspaceFolders] = this._clientOptions.workspaceFolder !== undefined ? [this._clientOptions.workspaceFolder.uri.fsPath, [{ uri: this._c2p.asUri(this._clientOptions.workspaceFolder.uri), name: this._clientOptions.workspaceFolder.name }]] : [this._clientGetRootPath(), null];
      const initParams = {
        processId: null,
        clientInfo: {
          name: vscode_1.env.appName,
          version: vscode_1.version
        },
        locale: this.getLocale(),
        rootPath: rootPath ? rootPath : null,
        rootUri: rootPath ? this._c2p.asUri(vscode_1.Uri.file(rootPath)) : null,
        capabilities: this.computeClientCapabilities(),
        initializationOptions: Is.func(initOption) ? initOption() : initOption,
        trace: vscode_languageserver_protocol_1.Trace.toString(this._trace),
        workspaceFolders
      };
      this.fillInitializeParams(initParams);
      if (this._clientOptions.progressOnInitialization) {
        const token = UUID.generateUuid();
        const part = new progressPart_1.ProgressPart(connection, token);
        initParams.workDoneToken = token;
        try {
          const result = await this.doInitialize(connection, initParams);
          part.done();
          return result;
        } catch (error) {
          part.cancel();
          throw error;
        }
      } else {
        return this.doInitialize(connection, initParams);
      }
    }
    async doInitialize(connection, initParams) {
      try {
        const result = await connection.initialize(initParams);
        if (result.capabilities.positionEncoding !== undefined && result.capabilities.positionEncoding !== vscode_languageserver_protocol_1.PositionEncodingKind.UTF16) {
          throw new Error(`Unsupported position encoding (${result.capabilities.positionEncoding}) received from server ${this.name}`);
        }
        this._initializeResult = result;
        this.$state = ClientState.Running;
        let textDocumentSyncOptions = undefined;
        if (Is.number(result.capabilities.textDocumentSync)) {
          if (result.capabilities.textDocumentSync === vscode_languageserver_protocol_1.TextDocumentSyncKind.None) {
            textDocumentSyncOptions = {
              openClose: false,
              change: vscode_languageserver_protocol_1.TextDocumentSyncKind.None,
              save: undefined
            };
          } else {
            textDocumentSyncOptions = {
              openClose: true,
              change: result.capabilities.textDocumentSync,
              save: {
                includeText: false
              }
            };
          }
        } else if (result.capabilities.textDocumentSync !== undefined && result.capabilities.textDocumentSync !== null) {
          textDocumentSyncOptions = result.capabilities.textDocumentSync;
        }
        this._capabilities = Object.assign({}, result.capabilities, { resolvedTextDocumentSync: textDocumentSyncOptions });
        connection.onNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, (params) => this.handleDiagnostics(params));
        connection.onRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, (params) => this.handleRegistrationRequest(params));
        connection.onRequest("client/registerFeature", (params) => this.handleRegistrationRequest(params));
        connection.onRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, (params) => this.handleUnregistrationRequest(params));
        connection.onRequest("client/unregisterFeature", (params) => this.handleUnregistrationRequest(params));
        connection.onRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, (params) => this.handleApplyWorkspaceEdit(params));
        for (const [method, handler] of this._pendingNotificationHandlers) {
          this._notificationDisposables.set(method, connection.onNotification(method, handler));
        }
        this._pendingNotificationHandlers.clear();
        for (const [method, handler] of this._pendingRequestHandlers) {
          this._requestDisposables.set(method, connection.onRequest(method, handler));
        }
        this._pendingRequestHandlers.clear();
        for (const [token, data] of this._pendingProgressHandlers) {
          this._progressDisposables.set(token, connection.onProgress(data.type, token, data.handler));
        }
        this._pendingProgressHandlers.clear();
        await connection.sendNotification(vscode_languageserver_protocol_1.InitializedNotification.type, {});
        this.hookFileEvents(connection);
        this.hookLogLevelChanged(connection);
        this.hookConfigurationChanged(connection);
        this.initializeFeatures(connection);
        return result;
      } catch (error) {
        if (this._clientOptions.initializationFailedHandler) {
          if (this._clientOptions.initializationFailedHandler(error)) {
            this.initialize(connection);
          } else {
            this.stop();
          }
        } else if (error instanceof vscode_languageserver_protocol_1.ResponseError && error.data && error.data.retry) {
          vscode_1.window.showErrorMessage(error.message, { title: "Retry", id: "retry" }).then((item) => {
            if (item && item.id === "retry") {
              this.initialize(connection);
            } else {
              this.stop();
            }
          });
        } else {
          if (error && error.message) {
            vscode_1.window.showErrorMessage(error.message);
          }
          this.error("Server initialization failed.", error);
          this.stop();
        }
        throw error;
      }
    }
    _clientGetRootPath() {
      const folders = vscode_1.workspace.workspaceFolders;
      if (!folders || folders.length === 0) {
        return;
      }
      const folder = folders[0];
      if (folder.uri.scheme === "file") {
        return folder.uri.fsPath;
      }
      return;
    }
    stop(timeout = 2000) {
      return this.shutdown(ShutdownMode.Stop, timeout);
    }
    dispose(timeout = 2000) {
      try {
        this._disposed = "disposing";
        return this.stop(timeout);
      } finally {
        this._disposed = "disposed";
      }
    }
    async shutdown(mode, timeout = 2000) {
      if (this.$state === ClientState.Stopped || this.$state === ClientState.Initial) {
        return;
      }
      if (this.$state === ClientState.Stopping) {
        if (this._onStop !== undefined) {
          return this._onStop;
        } else {
          throw new Error(`Client is stopping but no stop promise available.`);
        }
      }
      const connection = this.activeConnection();
      if (connection === undefined || this.$state !== ClientState.Running) {
        throw new Error(`Client is not running and can't be stopped. It's current state is: ${this.$state}`);
      }
      this._initializeResult = undefined;
      this.$state = ClientState.Stopping;
      this.cleanUp(mode);
      const tp = new Promise((c) => {
        (0, vscode_languageserver_protocol_1.RAL)().timer.setTimeout(c, timeout);
      });
      const shutdown = (async (connection2) => {
        await connection2.shutdown();
        await connection2.exit();
        return connection2;
      })(connection);
      return this._onStop = Promise.race([tp, shutdown]).then((connection2) => {
        if (connection2 !== undefined) {
          connection2.end();
          connection2.dispose();
        } else {
          this.error(`Stopping server timed out`, undefined, false);
          throw new Error(`Stopping the server timed out`);
        }
      }, (error) => {
        this.error(`Stopping server failed`, error, false);
        throw error;
      }).finally(() => {
        this.$state = ClientState.Stopped;
        mode === ShutdownMode.Stop && this.cleanUpChannel();
        this._onStart = undefined;
        this._onStop = undefined;
        this._connection = undefined;
        this._ignoredRegistrations.clear();
      });
    }
    cleanUp(mode) {
      this._fileEvents = [];
      this._fileEventDelayer.cancel();
      const disposables = this._listeners.splice(0, this._listeners.length);
      for (const disposable of disposables) {
        disposable.dispose();
      }
      if (this._syncedDocuments) {
        this._syncedDocuments.clear();
      }
      for (const feature of Array.from(this._features.entries()).map((entry) => entry[1]).reverse()) {
        feature.clear();
      }
      if (mode === ShutdownMode.Stop || mode === ShutdownMode.Restart) {
        if (this._diagnostics === undefined) {
          this._diagnostics = null;
        }
        if (this._diagnostics !== null) {
          this._clientOptions.diagnosticCollectionProvider.dispose(this._diagnostics, features_1.DiagnosticCollectionSource.push);
          this._diagnostics = null;
        }
      }
      if (this._idleInterval !== undefined) {
        this._idleInterval.dispose();
        this._idleInterval = undefined;
      }
    }
    cleanUpChannel() {
      if (this._outputChannel !== undefined && this._disposeOutputChannel) {
        this._outputChannel.dispose();
        this._outputChannel = undefined;
      }
    }
    notifyFileEvent(event) {
      const client = this;
      async function didChangeWatchedFile(event2) {
        client._fileEvents.push(event2);
        return client._fileEventDelayer.trigger(async () => {
          const fileEvents = client._fileEvents;
          client._fileEvents = [];
          try {
            await client.sendNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, { changes: fileEvents });
          } catch (error) {
            client._fileEvents.push(...fileEvents);
            throw error;
          }
        });
      }
      const workSpaceMiddleware = this.clientOptions.middleware?.workspace;
      ((workSpaceMiddleware?.didChangeWatchedFile) ? workSpaceMiddleware.didChangeWatchedFile(event, didChangeWatchedFile) : didChangeWatchedFile(event)).catch((error) => {
        client.error(`Notifying file events failed.`, error);
      });
    }
    async sendPendingFullTextDocumentChanges(connection) {
      return this._pendingChangeSemaphore.lock(async () => {
        try {
          const changes = this._didChangeTextDocumentFeature.getPendingDocumentChanges(this._inFlightOpenNotifications);
          if (changes.length === 0) {
            return;
          }
          for (const document of changes) {
            const params = this.code2ProtocolConverter.asChangeTextDocumentParams(document);
            this._didChangeTextDocumentFeature.aboutToSendNotification(document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
            await connection.sendNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
            this._didChangeTextDocumentFeature.notificationSent(document, vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, params);
          }
        } catch (error) {
          this.error(`Sending pending changes failed`, error, false);
          throw error;
        }
      });
    }
    triggerPendingChangeDelivery() {
      this._pendingChangeDelayer.trigger(async () => {
        const connection = this.activeConnection();
        if (connection === undefined) {
          this.triggerPendingChangeDelivery();
          return;
        }
        await this.sendPendingFullTextDocumentChanges(connection);
      }).catch((error) => this.error(`Delivering pending changes failed`, error, false));
    }
    _diagnosticQueue = new Map;
    _diagnosticQueueState = { state: "idle" };
    handleDiagnostics(params) {
      if (this._diagnostics === null) {
        return;
      }
      const key = params.uri;
      if (this._diagnosticQueueState.state === "busy" && this._diagnosticQueueState.document === key) {
        this._diagnosticQueueState.tokenSource.cancel();
      }
      this._diagnosticQueue.set(params.uri, params.diagnostics);
      this.triggerDiagnosticQueue();
    }
    triggerDiagnosticQueue() {
      (0, vscode_languageserver_protocol_1.RAL)().timer.setImmediate(() => {
        this.workDiagnosticQueue();
      });
    }
    workDiagnosticQueue() {
      if (this._diagnosticQueueState.state === "busy") {
        return;
      }
      const next = this._diagnosticQueue.entries().next();
      if (next.done === true) {
        return;
      }
      const [document, diagnostics] = next.value;
      this._diagnosticQueue.delete(document);
      const tokenSource = new vscode_1.CancellationTokenSource;
      this._diagnosticQueueState = { state: "busy", document, tokenSource };
      this._p2c.asDiagnostics(diagnostics, tokenSource.token).then((converted) => {
        if (!tokenSource.token.isCancellationRequested) {
          const uri = this._p2c.asUri(document);
          const middleware = this.clientOptions.middleware;
          if (middleware.handleDiagnostics) {
            middleware.handleDiagnostics(uri, converted, (uri2, diagnostics2) => this.setDiagnostics(uri2, diagnostics2));
          } else {
            this.setDiagnostics(uri, converted);
          }
        }
      }).catch((error) => {
        this.error(`Processing diagnostic queue failed.`, error);
      }).finally(() => {
        this._diagnosticQueueState = { state: "idle" };
        this.triggerDiagnosticQueue();
      });
    }
    setDiagnostics(uri, diagnostics) {
      if (this._diagnostics === null) {
        return;
      }
      const diagnosticsCollection = this.diagnostics;
      if (diagnosticsCollection !== undefined) {
        diagnosticsCollection.set(uri, diagnostics);
      }
    }
    getLocale() {
      return vscode_1.env.language;
    }
    async $start() {
      if (this.$state === ClientState.StartFailed) {
        throw new Error(`Previous start failed. Can't restart server.`);
      }
      await this.start();
      const connection = this.activeConnection();
      if (connection === undefined) {
        throw new Error(`Starting server failed`);
      }
      return connection;
    }
    async createConnection() {
      const errorHandler = (error, message, count) => {
        this.handleConnectionError(error, message, count).catch((error2) => this.error(`Handling connection error failed`, error2));
      };
      const closeHandler = () => {
        this.handleConnectionClosed().catch((error) => this.error(`Handling connection close failed`, error));
      };
      const transports = await this.createMessageTransports(this._clientOptions.stdioEncoding || "utf8");
      this._connection = createConnection(transports.reader, transports.writer, errorHandler, closeHandler, this._clientOptions.connectionOptions);
      return this._connection;
    }
    async handleConnectionClosed() {
      if (this.$state === ClientState.Stopped) {
        return;
      }
      try {
        if (this._connection !== undefined) {
          this._connection.dispose();
        }
      } catch (error) {}
      let handlerResult = { action: CloseAction.DoNotRestart };
      if (this.$state !== ClientState.Stopping) {
        try {
          handlerResult = await this._clientOptions.errorHandler.closed();
        } catch (error) {}
      }
      this._connection = undefined;
      if (handlerResult.action === CloseAction.DoNotRestart) {
        this.error(handlerResult.message ?? "Connection to server got closed. Server will not be restarted.", undefined, handlerResult.handled === true ? false : "force");
        this.cleanUp(ShutdownMode.Stop);
        if (this.$state === ClientState.Starting) {
          this.$state = ClientState.StartFailed;
        } else {
          this.$state = ClientState.Stopped;
        }
        this._onStop = Promise.resolve();
        this._onStart = undefined;
      } else if (handlerResult.action === CloseAction.Restart) {
        this.info(handlerResult.message ?? "Connection to server got closed. Server will restart.", undefined, !handlerResult.handled);
        this.cleanUp(ShutdownMode.Restart);
        this.$state = ClientState.Initial;
        this._onStop = Promise.resolve();
        this._onStart = undefined;
        this.start().catch((error) => this.error(`Restarting server failed`, error, "force"));
      }
    }
    async handleConnectionError(error, message, count) {
      const handlerResult = await this._clientOptions.errorHandler.error(error, message, count);
      if (handlerResult.action === ErrorAction.Shutdown) {
        this.error(handlerResult.message ?? `Client ${this._name}: connection to server is erroring.
${error.message}
Shutting down server.`, undefined, handlerResult.handled === true ? false : "force");
        this.stop().catch((error2) => {
          this.error(`Stopping server failed`, error2, false);
        });
      } else {
        this.error(handlerResult.message ?? `Client ${this._name}: connection to server is erroring.
${error.message}`, undefined, handlerResult.handled === true ? false : "force");
      }
    }
    hookConfigurationChanged(connection) {
      this._listeners.push(vscode_1.workspace.onDidChangeConfiguration(() => {
        this.refreshTrace(connection, true);
      }));
    }
    hookLogLevelChanged(connection) {
      this._listeners.push(this.traceOutputChannel.onDidChangeLogLevel((level) => {
        this._traceLogLevel = level;
        this.refreshTrace(connection, true);
      }));
    }
    refreshTrace(connection, sendNotification = false) {
      const config = vscode_1.workspace.getConfiguration(this._id);
      let trace = this._traceLogLevel !== vscode_1.LogLevel.Trace ? vscode_languageserver_protocol_1.Trace.Off : vscode_languageserver_protocol_1.Trace.Messages;
      let traceFormat = vscode_languageserver_protocol_1.TraceFormat.Text;
      if (config && trace !== vscode_languageserver_protocol_1.Trace.Off) {
        const traceConfig = config.get("trace.server", "messages");
        if (typeof traceConfig === "string") {
          trace = vscode_languageserver_protocol_1.Trace.fromString(traceConfig);
          if (trace === vscode_languageserver_protocol_1.Trace.Off) {
            trace = vscode_languageserver_protocol_1.Trace.Messages;
          }
        } else {
          trace = vscode_languageserver_protocol_1.Trace.fromString(config.get("trace.server.verbosity", "messages"));
          if (trace === vscode_languageserver_protocol_1.Trace.Off) {
            trace = vscode_languageserver_protocol_1.Trace.Messages;
          }
          traceFormat = vscode_languageserver_protocol_1.TraceFormat.fromString(config.get("trace.server.format", "text"));
        }
      }
      this._trace = trace;
      this._traceFormat = traceFormat;
      connection.trace(this._trace, this._tracer, {
        sendNotification,
        traceFormat: this._traceFormat
      }).catch((error) => {
        this.error(`Updating trace failed with error`, error, false);
      });
    }
    hookFileEvents(_connection) {
      const fileEvents = this._clientOptions.synchronize.fileEvents;
      if (!fileEvents) {
        return;
      }
      let watchers;
      if (Is.array(fileEvents)) {
        watchers = fileEvents;
      } else {
        watchers = [fileEvents];
      }
      if (!watchers) {
        return;
      }
      this._dynamicFeatures.get(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type.method).registerRaw(UUID.generateUuid(), watchers);
    }
    _features = [];
    _dynamicFeatures = new Map;
    registerFeatures(features) {
      for (const feature of features) {
        this.registerFeature(feature);
      }
    }
    registerFeature(feature) {
      this._features.push(feature);
      if (features_1.DynamicFeature.is(feature)) {
        const registrationType = feature.registrationType;
        this._dynamicFeatures.set(registrationType.method, feature);
      }
    }
    getFeature(request) {
      return this._dynamicFeatures.get(request);
    }
    hasDedicatedTextSynchronizationFeature(textDocument) {
      const feature = this.getFeature(vscode_languageserver_protocol_1.NotebookDocumentSyncRegistrationType.method);
      if (feature === undefined || !(feature instanceof notebook_1.NotebookDocumentSyncFeature)) {
        return false;
      }
      return feature.handles(textDocument);
    }
    registerBuiltinFeatures() {
      const pendingFullTextDocumentChanges = new Map;
      this.registerFeature(new configuration_1.ConfigurationFeature(this));
      this._didOpenTextDocumentFeature = new textSynchronization_1.DidOpenTextDocumentFeature(this, this._syncedDocuments);
      this.registerFeature(this._didOpenTextDocumentFeature);
      this._didChangeTextDocumentFeature = new textSynchronization_1.DidChangeTextDocumentFeature(this, pendingFullTextDocumentChanges);
      this._didChangeTextDocumentFeature.onPendingChangeAdded(() => {
        this.triggerPendingChangeDelivery();
      });
      this.registerFeature(this._didChangeTextDocumentFeature);
      this.registerFeature(new textSynchronization_1.WillSaveFeature(this));
      this.registerFeature(new textSynchronization_1.WillSaveWaitUntilFeature(this));
      this.registerFeature(new textSynchronization_1.DidSaveTextDocumentFeature(this));
      this.registerFeature(new textSynchronization_1.DidCloseTextDocumentFeature(this, this._syncedDocuments, pendingFullTextDocumentChanges));
      this.registerFeature(new fileSystemWatcher_1.FileSystemWatcherFeature(this, (event) => this.notifyFileEvent(event)));
      this.registerFeature(new completion_1.CompletionItemFeature(this));
      this.registerFeature(new hover_1.HoverFeature(this));
      this.registerFeature(new signatureHelp_1.SignatureHelpFeature(this));
      this.registerFeature(new definition_1.DefinitionFeature(this));
      this.registerFeature(new reference_1.ReferencesFeature(this));
      this.registerFeature(new documentHighlight_1.DocumentHighlightFeature(this));
      this.registerFeature(new documentSymbol_1.DocumentSymbolFeature(this));
      this.registerFeature(new workspaceSymbol_1.WorkspaceSymbolFeature(this));
      this.registerFeature(new codeAction_1.CodeActionFeature(this));
      this.registerFeature(new codeLens_1.CodeLensFeature(this));
      this.registerFeature(new formatting_1.DocumentFormattingFeature(this));
      this.registerFeature(new formatting_1.DocumentRangeFormattingFeature(this));
      this.registerFeature(new formatting_1.DocumentOnTypeFormattingFeature(this));
      this.registerFeature(new rename_1.RenameFeature(this));
      this.registerFeature(new documentLink_1.DocumentLinkFeature(this));
      this.registerFeature(new executeCommand_1.ExecuteCommandFeature(this));
      this.registerFeature(new configuration_1.SyncConfigurationFeature(this));
      this.registerFeature(new typeDefinition_1.TypeDefinitionFeature(this));
      this.registerFeature(new implementation_1.ImplementationFeature(this));
      this.registerFeature(new colorProvider_1.ColorProviderFeature(this));
      if (this.clientOptions.workspaceFolder === undefined) {
        this.registerFeature(new workspaceFolder_1.WorkspaceFoldersFeature(this));
      }
      this.registerFeature(new foldingRange_1.FoldingRangeFeature(this));
      this.registerFeature(new declaration_1.DeclarationFeature(this));
      this.registerFeature(new selectionRange_1.SelectionRangeFeature(this));
      this.registerFeature(new progress_1.ProgressFeature(this));
      this.registerFeature(new callHierarchy_1.CallHierarchyFeature(this));
      this.registerFeature(new semanticTokens_1.SemanticTokensFeature(this));
      this.registerFeature(new linkedEditingRange_1.LinkedEditingFeature(this));
      this.registerFeature(new fileOperations_1.DidCreateFilesFeature(this));
      this.registerFeature(new fileOperations_1.DidRenameFilesFeature(this));
      this.registerFeature(new fileOperations_1.DidDeleteFilesFeature(this));
      this.registerFeature(new fileOperations_1.WillCreateFilesFeature(this));
      this.registerFeature(new fileOperations_1.WillRenameFilesFeature(this));
      this.registerFeature(new fileOperations_1.WillDeleteFilesFeature(this));
      this.registerFeature(new typeHierarchy_1.TypeHierarchyFeature(this));
      this.registerFeature(new inlineValue_1.InlineValueFeature(this));
      this.registerFeature(new inlayHint_1.InlayHintsFeature(this));
      this.registerFeature(new diagnostic_1.DiagnosticFeature(this));
      this.registerFeature(new notebook_1.NotebookDocumentSyncFeature(this));
      this.registerFeature(new inlineCompletion_1.InlineCompletionItemFeature(this));
      this.registerFeature(new textDocumentContent_1.TextDocumentContentFeature(this));
    }
    registerProposedFeatures() {
      this.registerFeatures(ProposedFeatures.createAll(this));
    }
    fillInitializeParams(params) {
      for (const feature of this._features) {
        if (Is.func(feature.fillInitializeParams)) {
          feature.fillInitializeParams(params);
        }
      }
    }
    computeClientCapabilities() {
      const result = {};
      (0, features_1.ensure)(result, "workspace").applyEdit = true;
      const workspaceEdit = (0, features_1.ensure)((0, features_1.ensure)(result, "workspace"), "workspaceEdit");
      workspaceEdit.documentChanges = true;
      workspaceEdit.resourceOperations = [vscode_languageserver_protocol_1.ResourceOperationKind.Create, vscode_languageserver_protocol_1.ResourceOperationKind.Rename, vscode_languageserver_protocol_1.ResourceOperationKind.Delete];
      workspaceEdit.failureHandling = vscode_languageserver_protocol_1.FailureHandlingKind.TextOnlyTransactional;
      workspaceEdit.normalizesLineEndings = true;
      workspaceEdit.changeAnnotationSupport = {
        groupsOnLabel: true
      };
      workspaceEdit.metadataSupport = true;
      workspaceEdit.snippetEditSupport = true;
      const diagnostics = (0, features_1.ensure)((0, features_1.ensure)(result, "textDocument"), "publishDiagnostics");
      diagnostics.relatedInformation = true;
      diagnostics.versionSupport = false;
      diagnostics.tagSupport = { valueSet: [vscode_languageserver_protocol_1.DiagnosticTag.Unnecessary, vscode_languageserver_protocol_1.DiagnosticTag.Deprecated] };
      diagnostics.codeDescriptionSupport = true;
      diagnostics.dataSupport = true;
      const textDocumentFilter = (0, features_1.ensure)((0, features_1.ensure)(result, "textDocument"), "filters");
      textDocumentFilter.relativePatternSupport = true;
      const windowCapabilities = (0, features_1.ensure)(result, "window");
      const showMessage = (0, features_1.ensure)(windowCapabilities, "showMessage");
      showMessage.messageActionItem = { additionalPropertiesSupport: true };
      const showDocument = (0, features_1.ensure)(windowCapabilities, "showDocument");
      showDocument.support = true;
      const generalCapabilities = (0, features_1.ensure)(result, "general");
      generalCapabilities.staleRequestSupport = {
        cancel: true,
        retryOnContentModified: Array.from(BaseLanguageClient.RequestsToCancelOnContentModified)
      };
      generalCapabilities.regularExpressions = { engine: "ECMAScript", version: "ES2020" };
      generalCapabilities.markdown = {
        parser: "marked",
        version: "1.1.0"
      };
      generalCapabilities.positionEncodings = ["utf-16"];
      if (this._clientOptions.markdown.supportHtml) {
        generalCapabilities.markdown.allowedTags = ["ul", "li", "p", "code", "blockquote", "ol", "h1", "h2", "h3", "h4", "h5", "h6", "hr", "em", "pre", "table", "thead", "tbody", "tr", "th", "td", "div", "del", "a", "strong", "br", "img", "span"];
      }
      for (const feature of this._features) {
        feature.fillClientCapabilities(result);
      }
      return result;
    }
    initializeFeatures(_connection) {
      const documentSelector = this._clientOptions.documentSelector;
      for (const feature of this._features) {
        if (Is.func(feature.preInitialize)) {
          feature.preInitialize(this._capabilities, documentSelector);
        }
      }
      for (const feature of this._features) {
        feature.initialize(this._capabilities, documentSelector);
      }
    }
    async handleRegistrationRequest(params) {
      const middleware = this.clientOptions.middleware?.handleRegisterCapability;
      if (middleware) {
        return middleware(params, (nextParams) => this.doRegisterCapability(nextParams));
      } else {
        return this.doRegisterCapability(params);
      }
    }
    async doRegisterCapability(params) {
      if (!this.isRunning()) {
        for (const registration of params.registrations) {
          this._ignoredRegistrations.add(registration.id);
        }
        return;
      }
      for (const registration of params.registrations) {
        const feature = this._dynamicFeatures.get(registration.method);
        if (feature === undefined) {
          return Promise.reject(new Error(`No feature implementation for ${registration.method} found. Registration failed.`));
        }
        const options = registration.registerOptions ?? {};
        options.documentSelector = options.documentSelector ?? this._clientOptions.documentSelector;
        const data = {
          id: registration.id,
          registerOptions: options
        };
        try {
          feature.register(data);
        } catch (err) {
          return Promise.reject(err);
        }
      }
    }
    async handleUnregistrationRequest(params) {
      const middleware = this.clientOptions.middleware?.handleUnregisterCapability;
      if (middleware) {
        return middleware(params, (nextParams) => this.doUnregisterCapability(nextParams));
      } else {
        return this.doUnregisterCapability(params);
      }
    }
    async doUnregisterCapability(params) {
      for (const unregistration of params.unregisterations) {
        if (this._ignoredRegistrations.has(unregistration.id)) {
          continue;
        }
        const feature = this._dynamicFeatures.get(unregistration.method);
        if (!feature) {
          return Promise.reject(new Error(`No feature implementation for ${unregistration.method} found. Unregistration failed.`));
        }
        feature.unregister(unregistration.id);
      }
    }
    async handleApplyWorkspaceEdit(params) {
      const middleware = this.clientOptions.middleware?.workspace?.handleApplyEdit;
      if (middleware) {
        const resultOrError = await middleware(params, (nextParams) => this.doHandleApplyWorkspaceEdit(nextParams));
        if (resultOrError instanceof vscode_languageserver_protocol_1.ResponseError) {
          return Promise.reject(resultOrError);
        }
        return resultOrError;
      } else {
        return this.doHandleApplyWorkspaceEdit(params);
      }
    }
    workspaceEditLock = new async_1.Semaphore(1);
    async doHandleApplyWorkspaceEdit(params) {
      const workspaceEdit = params.edit;
      const converted = await this.workspaceEditLock.lock(() => {
        return this._p2c.asWorkspaceEdit(workspaceEdit);
      });
      const valid = this.validateWorkspaceEdit(workspaceEdit);
      if (!valid) {
        return Promise.resolve({ applied: false });
      }
      return Is.asPromise(vscode_1.workspace.applyEdit(converted, { isRefactoring: params.metadata?.isRefactoring }).then((value) => {
        return { applied: value };
      }));
    }
    validateWorkspaceEdit(workspaceEdit) {
      const openTextDocuments = new Map;
      vscode_1.workspace.textDocuments.forEach((document) => openTextDocuments.set(document.uri.toString(), document));
      if (workspaceEdit.documentChanges) {
        for (const change of workspaceEdit.documentChanges) {
          if (vscode_languageserver_protocol_1.TextDocumentEdit.is(change) && change.textDocument.version !== null && change.textDocument.version >= 0) {
            const changeUri = this._p2c.asUri(change.textDocument.uri).toString();
            const textDocument = openTextDocuments.get(changeUri);
            if (textDocument && textDocument.version !== change.textDocument.version) {
              return false;
            }
          }
        }
      }
      return true;
    }
    static RequestsToCancelOnContentModified = new Set([
      vscode_languageserver_protocol_1.SemanticTokensRequest.method,
      vscode_languageserver_protocol_1.SemanticTokensRangeRequest.method,
      vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.method
    ]);
    static CancellableResolveCalls = new Set([
      vscode_languageserver_protocol_1.CompletionResolveRequest.method,
      vscode_languageserver_protocol_1.CodeLensResolveRequest.method,
      vscode_languageserver_protocol_1.CodeActionResolveRequest.method,
      vscode_languageserver_protocol_1.InlayHintResolveRequest.method,
      vscode_languageserver_protocol_1.DocumentLinkResolveRequest.method,
      vscode_languageserver_protocol_1.WorkspaceSymbolResolveRequest.method
    ]);
    handleFailedRequest(type, token, error, defaultValue, showNotification = true, throwOnCancel = false) {
      if (error instanceof vscode_languageserver_protocol_1.ResponseError) {
        if (error.code === vscode_languageserver_protocol_1.ErrorCodes.PendingResponseRejected || error.code === vscode_languageserver_protocol_1.ErrorCodes.ConnectionInactive) {
          return defaultValue;
        }
        if (error.code === vscode_languageserver_protocol_1.LSPErrorCodes.RequestCancelled || error.code === vscode_languageserver_protocol_1.LSPErrorCodes.ServerCancelled) {
          if (token !== undefined && token.isCancellationRequested && !throwOnCancel) {
            return defaultValue;
          } else {
            if (error.data !== undefined) {
              throw new features_1.LSPCancellationError(error.data);
            } else {
              throw new vscode_1.CancellationError;
            }
          }
        } else if (error.code === vscode_languageserver_protocol_1.LSPErrorCodes.ContentModified) {
          if (BaseLanguageClient.RequestsToCancelOnContentModified.has(type.method) || BaseLanguageClient.CancellableResolveCalls.has(type.method)) {
            throw new vscode_1.CancellationError;
          } else {
            return defaultValue;
          }
        }
      }
      this.error(`Request ${type.method} failed.`, error, showNotification);
      throw error;
    }
  }
  exports2.BaseLanguageClient = BaseLanguageClient;

  class LanguageClient extends BaseLanguageClient {
    serverOptions;
    constructor(id, name, serverOptions, clientOptions) {
      super(id, name, clientOptions);
      this.serverOptions = serverOptions;
    }
    async createMessageTransports(_encoding) {
      return this.serverOptions();
    }
  }
  exports2.LanguageClient = LanguageClient;

  class ConsoleLogger {
    error(message) {
      (0, vscode_languageserver_protocol_1.RAL)().console.error(message);
    }
    warn(message) {
      (0, vscode_languageserver_protocol_1.RAL)().console.warn(message);
    }
    info(message) {
      (0, vscode_languageserver_protocol_1.RAL)().console.info(message);
    }
    log(message) {
      (0, vscode_languageserver_protocol_1.RAL)().console.log(message);
    }
  }
  function createConnection(input, output, errorHandler, closeHandler, options) {
    const logger = new ConsoleLogger;
    const connection = (0, vscode_languageserver_protocol_1.createProtocolConnection)(input, output, logger, options);
    connection.onError((data) => {
      errorHandler(data[0], data[1], data[2]);
    });
    connection.onClose(closeHandler);
    const result = {
      listen: () => connection.listen(),
      sendRequest: connection.sendRequest,
      onRequest: connection.onRequest,
      hasPendingResponse: connection.hasPendingResponse,
      sendNotification: connection.sendNotification,
      onNotification: connection.onNotification,
      onProgress: connection.onProgress,
      sendProgress: connection.sendProgress,
      trace: (value, tracer, sendNotificationOrTraceOptions) => {
        const defaultTraceOptions = {
          sendNotification: false,
          traceFormat: vscode_languageserver_protocol_1.TraceFormat.Text
        };
        if (sendNotificationOrTraceOptions === undefined) {
          return connection.trace(value, tracer, defaultTraceOptions);
        } else if (Is.boolean(sendNotificationOrTraceOptions)) {
          return connection.trace(value, tracer, sendNotificationOrTraceOptions);
        } else {
          return connection.trace(value, tracer, sendNotificationOrTraceOptions);
        }
      },
      initialize: (params) => {
        return connection.sendRequest(vscode_languageserver_protocol_1.InitializeRequest.type, params);
      },
      shutdown: () => {
        return connection.sendRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, undefined);
      },
      exit: () => {
        return connection.sendNotification(vscode_languageserver_protocol_1.ExitNotification.type);
      },
      end: () => connection.end(),
      dispose: () => connection.dispose()
    };
    return result;
  }
  var ProposedFeatures;
  (function(ProposedFeatures2) {
    function createAll(_client) {
      const result = [];
      return result;
    }
    ProposedFeatures2.createAll = createAll;
  })(ProposedFeatures || (exports2.ProposedFeatures = ProposedFeatures = {}));
});

// editors/vscode/node_modules/vscode-languageclient/lib/node/processes.js
var require_processes = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.terminate = terminate;
  var cp = __importStar(require("child_process"));
  var isWindows = process.platform === "win32";
  var isMacintosh = process.platform === "darwin";
  var isLinux = process.platform === "linux";
  function terminate(process2, cwd) {
    if (isWindows) {
      try {
        const options = {
          stdio: ["pipe", "pipe", "ignore"]
        };
        if (cwd) {
          options.cwd = cwd;
        }
        cp.execFileSync("taskkill", ["/T", "/F", "/PID", process2.pid.toString()], options);
        return true;
      } catch (err) {
        return false;
      }
    } else if (isLinux || isMacintosh) {
      try {
        const pid = process2.pid.toString();
        if (!/^\d+$/.test(pid)) {
          return false;
        }
        const script = `
terminateTree() {
	for cpid in $(pgrep -P "$1"); do
		terminateTree "$cpid"
	done
	kill -9 "$1" > /dev/null 2>&1
}

terminateTree "${pid}"
`;
        const result = cp.spawnSync("/bin/sh", [], {
          input: script,
          stdio: ["pipe", "inherit", "inherit"]
        });
        return result.error ? false : true;
      } catch (err) {
        return false;
      }
    } else {
      process2.kill("SIGKILL");
      return true;
    }
  }
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/node/ril.js
var require_ril = __commonJS((exports2) => {
  Object.defineProperty(exports2, "__esModule", { value: true });
  var util_1 = require("util");
  var api_1 = require_api();

  class MessageBuffer extends api_1.AbstractMessageBuffer {
    static emptyBuffer = Buffer.allocUnsafe(0);
    constructor(encoding = "utf-8") {
      super(encoding);
    }
    emptyBuffer() {
      return MessageBuffer.emptyBuffer;
    }
    fromString(value, encoding) {
      return Buffer.from(value, encoding);
    }
    toString(value, encoding) {
      if (value instanceof Buffer) {
        return value.toString(encoding);
      } else {
        return new util_1.TextDecoder(encoding).decode(value);
      }
    }
    asNative(buffer, length) {
      if (length === undefined) {
        return buffer instanceof Buffer ? buffer : Buffer.from(buffer);
      } else {
        return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);
      }
    }
    allocNative(length) {
      return Buffer.allocUnsafe(length);
    }
  }

  class ReadableStreamWrapper {
    stream;
    constructor(stream) {
      this.stream = stream;
    }
    onClose(listener) {
      this.stream.on("close", listener);
      return api_1.Disposable.create(() => this.stream.off("close", listener));
    }
    onError(listener) {
      this.stream.on("error", listener);
      return api_1.Disposable.create(() => this.stream.off("error", listener));
    }
    onEnd(listener) {
      this.stream.on("end", listener);
      return api_1.Disposable.create(() => this.stream.off("end", listener));
    }
    onData(listener) {
      this.stream.on("data", listener);
      return api_1.Disposable.create(() => this.stream.off("data", listener));
    }
  }

  class WritableStreamWrapper {
    stream;
    constructor(stream) {
      this.stream = stream;
    }
    onClose(listener) {
      this.stream.on("close", listener);
      return api_1.Disposable.create(() => this.stream.off("close", listener));
    }
    onError(listener) {
      this.stream.on("error", listener);
      return api_1.Disposable.create(() => this.stream.off("error", listener));
    }
    onEnd(listener) {
      this.stream.on("end", listener);
      return api_1.Disposable.create(() => this.stream.off("end", listener));
    }
    write(data, encoding) {
      return new Promise((resolve, reject) => {
        const callback = (error) => {
          if (error === undefined || error === null) {
            resolve();
          } else {
            reject(error);
          }
        };
        if (typeof data === "string") {
          this.stream.write(data, encoding, callback);
        } else {
          this.stream.write(data, callback);
        }
      });
    }
    end() {
      this.stream.end();
    }
  }
  var _ril = Object.freeze({
    messageBuffer: Object.freeze({
      create: (encoding) => new MessageBuffer(encoding)
    }),
    applicationJson: Object.freeze({
      encoder: Object.freeze({
        name: "application/json",
        encode: (msg, options) => {
          try {
            return Promise.resolve(Buffer.from(JSON.stringify(msg, undefined, 0), options.charset));
          } catch (err) {
            return Promise.reject(err);
          }
        }
      }),
      decoder: Object.freeze({
        name: "application/json",
        decode: (buffer, options) => {
          try {
            if (buffer instanceof Buffer) {
              return Promise.resolve(JSON.parse(buffer.toString(options.charset)));
            } else {
              return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));
            }
          } catch (err) {
            return Promise.reject(err);
          }
        }
      })
    }),
    stream: Object.freeze({
      asReadableStream: (stream) => new ReadableStreamWrapper(stream),
      asWritableStream: (stream) => new WritableStreamWrapper(stream)
    }),
    console,
    timer: Object.freeze({
      setTimeout(callback, ms, ...args) {
        const handle = setTimeout(callback, ms, ...args);
        return { dispose: () => clearTimeout(handle) };
      },
      setImmediate(callback, ...args) {
        const handle = setImmediate(callback, ...args);
        return { dispose: () => clearImmediate(handle) };
      },
      setInterval(callback, ms, ...args) {
        const handle = setInterval(callback, ms, ...args);
        return { dispose: () => clearInterval(handle) };
      }
    })
  });
  function RIL() {
    return _ril;
  }
  (function(RIL2) {
    function install() {
      api_1.RAL.install(_ril);
    }
    RIL2.install = install;
  })(RIL || (RIL = {}));
  exports2.default = RIL;
});

// editors/vscode/node_modules/vscode-jsonrpc/lib/node/main.js
var require_main3 = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
    for (var p in m)
      if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
        __createBinding(exports3, m, p);
  };
  var __importDefault = exports2 && exports2.__importDefault || function(mod) {
    return mod && mod.__esModule ? mod : { default: mod };
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.StreamMessageWriter = exports2.StreamMessageReader = exports2.SocketMessageWriter = exports2.SocketMessageReader = exports2.PortMessageWriter = exports2.PortMessageReader = exports2.IPCMessageWriter = exports2.IPCMessageReader = undefined;
  exports2.generateRandomPipeName = generateRandomPipeName;
  exports2.createClientPipeTransport = createClientPipeTransport;
  exports2.createServerPipeTransport = createServerPipeTransport;
  exports2.createClientSocketTransport = createClientSocketTransport;
  exports2.createServerSocketTransport = createServerSocketTransport;
  exports2.createMessageConnection = createMessageConnection;
  var ril_1 = __importDefault(require_ril());
  ril_1.default.install();
  var path = __importStar(require("path"));
  var os = __importStar(require("os"));
  var fs = __importStar(require("fs"));
  var crypto_1 = require("crypto");
  var net_1 = require("net");
  var api_1 = require_api();
  __exportStar(require_api(), exports2);

  class IPCMessageReader extends api_1.AbstractMessageReader {
    process;
    constructor(process2) {
      super();
      this.process = process2;
      const eventEmitter = this.process;
      eventEmitter.on("error", (error) => this.fireError(error));
      eventEmitter.on("close", () => this.fireClose());
    }
    listen(callback) {
      this.process.on("message", callback);
      return api_1.Disposable.create(() => this.process.off("message", callback));
    }
  }
  exports2.IPCMessageReader = IPCMessageReader;

  class IPCMessageWriter extends api_1.AbstractMessageWriter {
    process;
    errorCount;
    constructor(process2) {
      super();
      this.process = process2;
      this.errorCount = 0;
      const eventEmitter = this.process;
      eventEmitter.on("error", (error) => this.fireError(error));
      eventEmitter.on("close", () => this.fireClose);
    }
    write(msg) {
      try {
        if (typeof this.process.send === "function") {
          this.process.send(msg, undefined, undefined, (error) => {
            if (error) {
              this.errorCount++;
              this.handleError(error, msg);
            } else {
              this.errorCount = 0;
            }
          });
        }
        return Promise.resolve();
      } catch (error) {
        this.handleError(error, msg);
        return Promise.reject(error);
      }
    }
    handleError(error, msg) {
      this.errorCount++;
      this.fireError(error, msg, this.errorCount);
    }
    end() {}
  }
  exports2.IPCMessageWriter = IPCMessageWriter;

  class PortMessageReader extends api_1.AbstractMessageReader {
    onData;
    constructor(port) {
      super();
      this.onData = new api_1.Emitter;
      port.on("close", () => this.fireClose);
      port.on("error", (error) => this.fireError(error));
      port.on("message", (message) => {
        this.onData.fire(message);
      });
    }
    listen(callback) {
      return this.onData.event(callback);
    }
  }
  exports2.PortMessageReader = PortMessageReader;

  class PortMessageWriter extends api_1.AbstractMessageWriter {
    port;
    errorCount;
    constructor(port) {
      super();
      this.port = port;
      this.errorCount = 0;
      port.on("close", () => this.fireClose());
      port.on("error", (error) => this.fireError(error));
    }
    write(msg) {
      try {
        this.port.postMessage(msg);
        return Promise.resolve();
      } catch (error) {
        this.handleError(error, msg);
        return Promise.reject(error);
      }
    }
    handleError(error, msg) {
      this.errorCount++;
      this.fireError(error, msg, this.errorCount);
    }
    end() {}
  }
  exports2.PortMessageWriter = PortMessageWriter;

  class SocketMessageReader extends api_1.ReadableStreamMessageReader {
    constructor(socket, encoding = "utf-8") {
      super((0, ril_1.default)().stream.asReadableStream(socket), encoding);
    }
  }
  exports2.SocketMessageReader = SocketMessageReader;

  class SocketMessageWriter extends api_1.WriteableStreamMessageWriter {
    socket;
    constructor(socket, options) {
      super((0, ril_1.default)().stream.asWritableStream(socket), options);
      this.socket = socket;
    }
    dispose() {
      super.dispose();
      this.socket.destroy();
    }
  }
  exports2.SocketMessageWriter = SocketMessageWriter;

  class StreamMessageReader extends api_1.ReadableStreamMessageReader {
    constructor(readable, encoding) {
      super((0, ril_1.default)().stream.asReadableStream(readable), encoding);
    }
  }
  exports2.StreamMessageReader = StreamMessageReader;

  class StreamMessageWriter extends api_1.WriteableStreamMessageWriter {
    constructor(writable, options) {
      super((0, ril_1.default)().stream.asWritableStream(writable), options);
    }
  }
  exports2.StreamMessageWriter = StreamMessageWriter;
  var XDG_RUNTIME_DIR = process.env["XDG_RUNTIME_DIR"];
  var safeIpcPathLengths = new Map([
    ["linux", 107],
    ["darwin", 102]
  ]);
  function generateRandomPipeName() {
    if (process.platform === "win32") {
      return `\\\\.\\pipe\\lsp-${(0, crypto_1.randomBytes)(16).toString("hex")}-sock`;
    }
    let randomLength = 32;
    const fixedLength = "/lsp-.sock".length;
    const tmpDir = fs.realpathSync(XDG_RUNTIME_DIR ?? os.tmpdir());
    const limit = safeIpcPathLengths.get(process.platform);
    if (limit !== undefined) {
      randomLength = Math.min(limit - tmpDir.length - fixedLength, randomLength);
    }
    if (randomLength < 16) {
      throw new Error(`Unable to generate a random pipe name with ${randomLength} characters.`);
    }
    const randomSuffix = (0, crypto_1.randomBytes)(Math.floor(randomLength / 2)).toString("hex");
    return path.join(tmpDir, `lsp-${randomSuffix}.sock`);
  }
  function createClientPipeTransport(pipeName, encoding = "utf-8") {
    let connectResolve;
    const connected = new Promise((resolve, _reject) => {
      connectResolve = resolve;
    });
    return new Promise((resolve, reject) => {
      const server = (0, net_1.createServer)((socket) => {
        server.close();
        connectResolve([
          new SocketMessageReader(socket, encoding),
          new SocketMessageWriter(socket, encoding)
        ]);
      });
      server.on("error", reject);
      server.listen(pipeName, () => {
        server.removeListener("error", reject);
        resolve({
          onConnected: () => {
            return connected;
          }
        });
      });
    });
  }
  function createServerPipeTransport(pipeName, encoding = "utf-8") {
    const socket = (0, net_1.createConnection)(pipeName);
    return [
      new SocketMessageReader(socket, encoding),
      new SocketMessageWriter(socket, encoding)
    ];
  }
  function createClientSocketTransport(port, encoding = "utf-8") {
    let connectResolve;
    const connected = new Promise((resolve, _reject) => {
      connectResolve = resolve;
    });
    return new Promise((resolve, reject) => {
      const server = (0, net_1.createServer)((socket) => {
        server.close();
        connectResolve([
          new SocketMessageReader(socket, encoding),
          new SocketMessageWriter(socket, encoding)
        ]);
      });
      server.on("error", reject);
      server.listen(port, "127.0.0.1", () => {
        server.removeListener("error", reject);
        resolve({
          onConnected: () => {
            return connected;
          }
        });
      });
    });
  }
  function createServerSocketTransport(port, encoding = "utf-8") {
    const socket = (0, net_1.createConnection)(port, "127.0.0.1");
    return [
      new SocketMessageReader(socket, encoding),
      new SocketMessageWriter(socket, encoding)
    ];
  }
  function isReadableStream(value) {
    const candidate = value;
    return candidate.read !== undefined && candidate.addListener !== undefined;
  }
  function isWritableStream(value) {
    const candidate = value;
    return candidate.write !== undefined && candidate.addListener !== undefined;
  }
  function createMessageConnection(input, output, logger, options) {
    if (!logger) {
      logger = api_1.NullLogger;
    }
    const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;
    const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;
    if (api_1.ConnectionStrategy.is(options)) {
      options = { connectionStrategy: options };
    }
    return (0, api_1.createMessageConnection)(reader, writer, logger, options);
  }
});

// editors/vscode/node_modules/vscode-languageserver-protocol/lib/node/main.js
var require_main4 = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
    for (var p in m)
      if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
        __createBinding(exports3, m, p);
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.createProtocolConnection = createProtocolConnection;
  var node_1 = require_main3();
  __exportStar(require_main3(), exports2);
  __exportStar(require_api2(), exports2);
  function createProtocolConnection(input, output, logger, options) {
    return (0, node_1.createMessageConnection)(input, output, logger, options);
  }
});

// editors/vscode/node_modules/semver/internal/debug.js
var require_debug = __commonJS((exports2, module2) => {
  var debug = typeof process === "object" && process.env && process.env.NODE_DEBUG && /\bsemver\b/i.test(process.env.NODE_DEBUG) ? (...args) => console.error("SEMVER", ...args) : () => {};
  module2.exports = debug;
});

// editors/vscode/node_modules/semver/internal/constants.js
var require_constants = __commonJS((exports2, module2) => {
  var SEMVER_SPEC_VERSION = "2.0.0";
  var MAX_LENGTH = 256;
  var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;
  var MAX_SAFE_COMPONENT_LENGTH = 16;
  var MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6;
  var RELEASE_TYPES = [
    "major",
    "premajor",
    "minor",
    "preminor",
    "patch",
    "prepatch",
    "prerelease"
  ];
  module2.exports = {
    MAX_LENGTH,
    MAX_SAFE_COMPONENT_LENGTH,
    MAX_SAFE_BUILD_LENGTH,
    MAX_SAFE_INTEGER,
    RELEASE_TYPES,
    SEMVER_SPEC_VERSION,
    FLAG_INCLUDE_PRERELEASE: 1,
    FLAG_LOOSE: 2
  };
});

// editors/vscode/node_modules/semver/internal/re.js
var require_re = __commonJS((exports2, module2) => {
  var {
    MAX_SAFE_COMPONENT_LENGTH,
    MAX_SAFE_BUILD_LENGTH,
    MAX_LENGTH
  } = require_constants();
  var debug = require_debug();
  exports2 = module2.exports = {};
  var re = exports2.re = [];
  var safeRe = exports2.safeRe = [];
  var src = exports2.src = [];
  var safeSrc = exports2.safeSrc = [];
  var t = exports2.t = {};
  var R = 0;
  var LETTERDASHNUMBER = "[a-zA-Z0-9-]";
  var safeRegexReplacements = [
    ["\\s", 1],
    ["\\d", MAX_LENGTH],
    [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH]
  ];
  var makeSafeRegex = (value) => {
    for (const [token, max] of safeRegexReplacements) {
      value = value.split(`${token}*`).join(`${token}{0,${max}}`).split(`${token}+`).join(`${token}{1,${max}}`);
    }
    return value;
  };
  var createToken = (name, value, isGlobal) => {
    const safe = makeSafeRegex(value);
    const index = R++;
    debug(name, index, value);
    t[name] = index;
    src[index] = value;
    safeSrc[index] = safe;
    re[index] = new RegExp(value, isGlobal ? "g" : undefined);
    safeRe[index] = new RegExp(safe, isGlobal ? "g" : undefined);
  };
  createToken("NUMERICIDENTIFIER", "0|[1-9]\\d*");
  createToken("NUMERICIDENTIFIERLOOSE", "\\d+");
  createToken("NONNUMERICIDENTIFIER", `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
  createToken("MAINVERSION", `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})\\.` + `(${src[t.NUMERICIDENTIFIER]})`);
  createToken("MAINVERSIONLOOSE", `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` + `(${src[t.NUMERICIDENTIFIERLOOSE]})`);
  createToken("PRERELEASEIDENTIFIER", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIER]})`);
  createToken("PRERELEASEIDENTIFIERLOOSE", `(?:${src[t.NONNUMERICIDENTIFIER]}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
  createToken("PRERELEASE", `(?:-(${src[t.PRERELEASEIDENTIFIER]}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
  createToken("PRERELEASELOOSE", `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
  createToken("BUILDIDENTIFIER", `${LETTERDASHNUMBER}+`);
  createToken("BUILD", `(?:\\+(${src[t.BUILDIDENTIFIER]}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
  createToken("FULLPLAIN", `v?${src[t.MAINVERSION]}${src[t.PRERELEASE]}?${src[t.BUILD]}?`);
  createToken("FULL", `^${src[t.FULLPLAIN]}$`);
  createToken("LOOSEPLAIN", `[v=\\s]*${src[t.MAINVERSIONLOOSE]}${src[t.PRERELEASELOOSE]}?${src[t.BUILD]}?`);
  createToken("LOOSE", `^${src[t.LOOSEPLAIN]}$`);
  createToken("GTLT", "((?:<|>)?=?)");
  createToken("XRANGEIDENTIFIERLOOSE", `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
  createToken("XRANGEIDENTIFIER", `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
  createToken("XRANGEPLAIN", `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:\\.(${src[t.XRANGEIDENTIFIER]})` + `(?:${src[t.PRERELEASE]})?${src[t.BUILD]}?` + `)?)?`);
  createToken("XRANGEPLAINLOOSE", `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` + `(?:${src[t.PRERELEASELOOSE]})?${src[t.BUILD]}?` + `)?)?`);
  createToken("XRANGE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
  createToken("XRANGELOOSE", `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
  createToken("COERCEPLAIN", `${"(^|[^\\d])" + "(\\d{1,"}${MAX_SAFE_COMPONENT_LENGTH}})` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` + `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
  createToken("COERCE", `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
  createToken("COERCEFULL", src[t.COERCEPLAIN] + `(?:${src[t.PRERELEASE]})?` + `(?:${src[t.BUILD]})?` + `(?:$|[^\\d])`);
  createToken("COERCERTL", src[t.COERCE], true);
  createToken("COERCERTLFULL", src[t.COERCEFULL], true);
  createToken("LONETILDE", "(?:~>?)");
  createToken("TILDETRIM", `(\\s*)${src[t.LONETILDE]}\\s+`, true);
  exports2.tildeTrimReplace = "$1~";
  createToken("TILDE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
  createToken("TILDELOOSE", `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
  createToken("LONECARET", "(?:\\^)");
  createToken("CARETTRIM", `(\\s*)${src[t.LONECARET]}\\s+`, true);
  exports2.caretTrimReplace = "$1^";
  createToken("CARET", `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
  createToken("CARETLOOSE", `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
  createToken("COMPARATORLOOSE", `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
  createToken("COMPARATOR", `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
  createToken("COMPARATORTRIM", `(\\s*)${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
  exports2.comparatorTrimReplace = "$1$2$3";
  createToken("HYPHENRANGE", `^\\s*(${src[t.XRANGEPLAIN]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAIN]})` + `\\s*$`);
  createToken("HYPHENRANGELOOSE", `^\\s*(${src[t.XRANGEPLAINLOOSE]})` + `\\s+-\\s+` + `(${src[t.XRANGEPLAINLOOSE]})` + `\\s*$`);
  createToken("STAR", "(<|>)?=?\\s*\\*");
  createToken("GTE0", "^\\s*>=\\s*0\\.0\\.0\\s*$");
  createToken("GTE0PRE", "^\\s*>=\\s*0\\.0\\.0-0\\s*$");
});

// editors/vscode/node_modules/semver/internal/parse-options.js
var require_parse_options = __commonJS((exports2, module2) => {
  var looseOption = Object.freeze({ loose: true });
  var emptyOpts = Object.freeze({});
  var parseOptions = (options) => {
    if (!options) {
      return emptyOpts;
    }
    if (typeof options !== "object") {
      return looseOption;
    }
    return options;
  };
  module2.exports = parseOptions;
});

// editors/vscode/node_modules/semver/internal/identifiers.js
var require_identifiers = __commonJS((exports2, module2) => {
  var numeric = /^[0-9]+$/;
  var compareIdentifiers = (a, b) => {
    if (typeof a === "number" && typeof b === "number") {
      return a === b ? 0 : a < b ? -1 : 1;
    }
    const anum = numeric.test(a);
    const bnum = numeric.test(b);
    if (anum && bnum) {
      a = +a;
      b = +b;
    }
    return a === b ? 0 : anum && !bnum ? -1 : bnum && !anum ? 1 : a < b ? -1 : 1;
  };
  var rcompareIdentifiers = (a, b) => compareIdentifiers(b, a);
  module2.exports = {
    compareIdentifiers,
    rcompareIdentifiers
  };
});

// editors/vscode/node_modules/semver/classes/semver.js
var require_semver = __commonJS((exports2, module2) => {
  var debug = require_debug();
  var { MAX_LENGTH, MAX_SAFE_INTEGER } = require_constants();
  var { safeRe: re, t } = require_re();
  var parseOptions = require_parse_options();
  var { compareIdentifiers } = require_identifiers();
  var isPrereleaseIdentifier = (prerelease, identifier) => {
    const identifiers = identifier.split(".");
    if (identifiers.length > prerelease.length) {
      return false;
    }
    for (let i = 0;i < identifiers.length; i++) {
      if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {
        return false;
      }
    }
    return true;
  };

  class SemVer {
    constructor(version, options) {
      options = parseOptions(options);
      if (version instanceof SemVer) {
        if (version.loose === !!options.loose && version.includePrerelease === !!options.includePrerelease) {
          return version;
        } else {
          version = version.version;
        }
      } else if (typeof version !== "string") {
        throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`);
      }
      if (version.length > MAX_LENGTH) {
        throw new TypeError(`version is longer than ${MAX_LENGTH} characters`);
      }
      debug("SemVer", version, options);
      this.options = options;
      this.loose = !!options.loose;
      this.includePrerelease = !!options.includePrerelease;
      const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL]);
      if (!m) {
        throw new TypeError(`Invalid Version: ${version}`);
      }
      this.raw = version;
      this.major = +m[1];
      this.minor = +m[2];
      this.patch = +m[3];
      if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
        throw new TypeError("Invalid major version");
      }
      if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
        throw new TypeError("Invalid minor version");
      }
      if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
        throw new TypeError("Invalid patch version");
      }
      if (!m[4]) {
        this.prerelease = [];
      } else {
        this.prerelease = m[4].split(".").map((id) => {
          if (/^[0-9]+$/.test(id)) {
            const num = +id;
            if (num >= 0 && num < MAX_SAFE_INTEGER) {
              return num;
            }
          }
          return id;
        });
      }
      this.build = m[5] ? m[5].split(".") : [];
      this.format();
    }
    format() {
      this.version = `${this.major}.${this.minor}.${this.patch}`;
      if (this.prerelease.length) {
        this.version += `-${this.prerelease.join(".")}`;
      }
      return this.version;
    }
    toString() {
      return this.version;
    }
    compare(other) {
      debug("SemVer.compare", this.version, this.options, other);
      if (!(other instanceof SemVer)) {
        if (typeof other === "string" && other === this.version) {
          return 0;
        }
        other = new SemVer(other, this.options);
      }
      if (other.version === this.version) {
        return 0;
      }
      return this.compareMain(other) || this.comparePre(other);
    }
    compareMain(other) {
      if (!(other instanceof SemVer)) {
        other = new SemVer(other, this.options);
      }
      if (this.major < other.major) {
        return -1;
      }
      if (this.major > other.major) {
        return 1;
      }
      if (this.minor < other.minor) {
        return -1;
      }
      if (this.minor > other.minor) {
        return 1;
      }
      if (this.patch < other.patch) {
        return -1;
      }
      if (this.patch > other.patch) {
        return 1;
      }
      return 0;
    }
    comparePre(other) {
      if (!(other instanceof SemVer)) {
        other = new SemVer(other, this.options);
      }
      if (this.prerelease.length && !other.prerelease.length) {
        return -1;
      } else if (!this.prerelease.length && other.prerelease.length) {
        return 1;
      } else if (!this.prerelease.length && !other.prerelease.length) {
        return 0;
      }
      let i = 0;
      do {
        const a = this.prerelease[i];
        const b = other.prerelease[i];
        debug("prerelease compare", i, a, b);
        if (a === undefined && b === undefined) {
          return 0;
        } else if (b === undefined) {
          return 1;
        } else if (a === undefined) {
          return -1;
        } else if (a === b) {
          continue;
        } else {
          return compareIdentifiers(a, b);
        }
      } while (++i);
    }
    compareBuild(other) {
      if (!(other instanceof SemVer)) {
        other = new SemVer(other, this.options);
      }
      let i = 0;
      do {
        const a = this.build[i];
        const b = other.build[i];
        debug("build compare", i, a, b);
        if (a === undefined && b === undefined) {
          return 0;
        } else if (b === undefined) {
          return 1;
        } else if (a === undefined) {
          return -1;
        } else if (a === b) {
          continue;
        } else {
          return compareIdentifiers(a, b);
        }
      } while (++i);
    }
    inc(release, identifier, identifierBase) {
      if (release.startsWith("pre")) {
        if (!identifier && identifierBase === false) {
          throw new Error("invalid increment argument: identifier is empty");
        }
        if (identifier) {
          const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE]);
          if (!match || match[1] !== identifier) {
            throw new Error(`invalid identifier: ${identifier}`);
          }
        }
      }
      switch (release) {
        case "premajor":
          this.prerelease.length = 0;
          this.patch = 0;
          this.minor = 0;
          this.major++;
          this.inc("pre", identifier, identifierBase);
          break;
        case "preminor":
          this.prerelease.length = 0;
          this.patch = 0;
          this.minor++;
          this.inc("pre", identifier, identifierBase);
          break;
        case "prepatch":
          this.prerelease.length = 0;
          this.inc("patch", identifier, identifierBase);
          this.inc("pre", identifier, identifierBase);
          break;
        case "prerelease":
          if (this.prerelease.length === 0) {
            this.inc("patch", identifier, identifierBase);
          }
          this.inc("pre", identifier, identifierBase);
          break;
        case "release":
          if (this.prerelease.length === 0) {
            throw new Error(`version ${this.raw} is not a prerelease`);
          }
          this.prerelease.length = 0;
          break;
        case "major":
          if (this.minor !== 0 || this.patch !== 0 || this.prerelease.length === 0) {
            this.major++;
          }
          this.minor = 0;
          this.patch = 0;
          this.prerelease = [];
          break;
        case "minor":
          if (this.patch !== 0 || this.prerelease.length === 0) {
            this.minor++;
          }
          this.patch = 0;
          this.prerelease = [];
          break;
        case "patch":
          if (this.prerelease.length === 0) {
            this.patch++;
          }
          this.prerelease = [];
          break;
        case "pre": {
          const base = Number(identifierBase) ? 1 : 0;
          if (this.prerelease.length === 0) {
            this.prerelease = [base];
          } else {
            let i = this.prerelease.length;
            while (--i >= 0) {
              if (typeof this.prerelease[i] === "number") {
                this.prerelease[i]++;
                i = -2;
              }
            }
            if (i === -1) {
              if (identifier === this.prerelease.join(".") && identifierBase === false) {
                throw new Error("invalid increment argument: identifier already exists");
              }
              this.prerelease.push(base);
            }
          }
          if (identifier) {
            let prerelease = [identifier, base];
            if (identifierBase === false) {
              prerelease = [identifier];
            }
            if (isPrereleaseIdentifier(this.prerelease, identifier)) {
              const prereleaseBase = this.prerelease[identifier.split(".").length];
              if (isNaN(prereleaseBase)) {
                this.prerelease = prerelease;
              }
            } else {
              this.prerelease = prerelease;
            }
          }
          break;
        }
        default:
          throw new Error(`invalid increment argument: ${release}`);
      }
      this.raw = this.format();
      if (this.build.length) {
        this.raw += `+${this.build.join(".")}`;
      }
      return this;
    }
  }
  module2.exports = SemVer;
});

// editors/vscode/node_modules/semver/functions/parse.js
var require_parse = __commonJS((exports2, module2) => {
  var SemVer = require_semver();
  var parse = (version, options, throwErrors = false) => {
    if (version instanceof SemVer) {
      return version;
    }
    try {
      return new SemVer(version, options);
    } catch (er) {
      if (!throwErrors) {
        return null;
      }
      throw er;
    }
  };
  module2.exports = parse;
});

// editors/vscode/node_modules/semver/internal/lrucache.js
var require_lrucache = __commonJS((exports2, module2) => {
  class LRUCache {
    constructor() {
      this.max = 1000;
      this.map = new Map;
    }
    get(key) {
      const value = this.map.get(key);
      if (value === undefined) {
        return;
      } else {
        this.map.delete(key);
        this.map.set(key, value);
        return value;
      }
    }
    delete(key) {
      return this.map.delete(key);
    }
    set(key, value) {
      const deleted = this.delete(key);
      if (!deleted && value !== undefined) {
        if (this.map.size >= this.max) {
          const firstKey = this.map.keys().next().value;
          this.delete(firstKey);
        }
        this.map.set(key, value);
      }
      return this;
    }
  }
  module2.exports = LRUCache;
});

// editors/vscode/node_modules/semver/functions/compare.js
var require_compare = __commonJS((exports2, module2) => {
  var SemVer = require_semver();
  var compare = (a, b, loose) => new SemVer(a, loose).compare(new SemVer(b, loose));
  module2.exports = compare;
});

// editors/vscode/node_modules/semver/functions/eq.js
var require_eq = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var eq = (a, b, loose) => compare(a, b, loose) === 0;
  module2.exports = eq;
});

// editors/vscode/node_modules/semver/functions/neq.js
var require_neq = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var neq = (a, b, loose) => compare(a, b, loose) !== 0;
  module2.exports = neq;
});

// editors/vscode/node_modules/semver/functions/gt.js
var require_gt = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var gt = (a, b, loose) => compare(a, b, loose) > 0;
  module2.exports = gt;
});

// editors/vscode/node_modules/semver/functions/gte.js
var require_gte = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var gte = (a, b, loose) => compare(a, b, loose) >= 0;
  module2.exports = gte;
});

// editors/vscode/node_modules/semver/functions/lt.js
var require_lt = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var lt = (a, b, loose) => compare(a, b, loose) < 0;
  module2.exports = lt;
});

// editors/vscode/node_modules/semver/functions/lte.js
var require_lte = __commonJS((exports2, module2) => {
  var compare = require_compare();
  var lte = (a, b, loose) => compare(a, b, loose) <= 0;
  module2.exports = lte;
});

// editors/vscode/node_modules/semver/functions/cmp.js
var require_cmp = __commonJS((exports2, module2) => {
  var eq = require_eq();
  var neq = require_neq();
  var gt = require_gt();
  var gte = require_gte();
  var lt = require_lt();
  var lte = require_lte();
  var cmp = (a, op, b, loose) => {
    switch (op) {
      case "===":
        if (typeof a === "object") {
          a = a.version;
        }
        if (typeof b === "object") {
          b = b.version;
        }
        return a === b;
      case "!==":
        if (typeof a === "object") {
          a = a.version;
        }
        if (typeof b === "object") {
          b = b.version;
        }
        return a !== b;
      case "":
      case "=":
      case "==":
        return eq(a, b, loose);
      case "!=":
        return neq(a, b, loose);
      case ">":
        return gt(a, b, loose);
      case ">=":
        return gte(a, b, loose);
      case "<":
        return lt(a, b, loose);
      case "<=":
        return lte(a, b, loose);
      default:
        throw new TypeError(`Invalid operator: ${op}`);
    }
  };
  module2.exports = cmp;
});

// editors/vscode/node_modules/semver/classes/comparator.js
var require_comparator = __commonJS((exports2, module2) => {
  var ANY = Symbol("SemVer ANY");

  class Comparator {
    static get ANY() {
      return ANY;
    }
    constructor(comp, options) {
      options = parseOptions(options);
      if (comp instanceof Comparator) {
        if (comp.loose === !!options.loose) {
          return comp;
        } else {
          comp = comp.value;
        }
      }
      comp = comp.trim().split(/\s+/).join(" ");
      debug("comparator", comp, options);
      this.options = options;
      this.loose = !!options.loose;
      this.parse(comp);
      if (this.semver === ANY) {
        this.value = "";
      } else {
        this.value = this.operator + this.semver.version;
      }
      debug("comp", this);
    }
    parse(comp) {
      const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
      const m = comp.match(r);
      if (!m) {
        throw new TypeError(`Invalid comparator: ${comp}`);
      }
      this.operator = m[1] !== undefined ? m[1] : "";
      if (this.operator === "=") {
        this.operator = "";
      }
      if (!m[2]) {
        this.semver = ANY;
      } else {
        this.semver = new SemVer(m[2], this.options.loose);
      }
    }
    toString() {
      return this.value;
    }
    test(version) {
      debug("Comparator.test", version, this.options.loose);
      if (this.semver === ANY || version === ANY) {
        return true;
      }
      if (typeof version === "string") {
        try {
          version = new SemVer(version, this.options);
        } catch (er) {
          return false;
        }
      }
      return cmp(version, this.operator, this.semver, this.options);
    }
    intersects(comp, options) {
      if (!(comp instanceof Comparator)) {
        throw new TypeError("a Comparator is required");
      }
      if (this.operator === "") {
        if (this.value === "") {
          return true;
        }
        return new Range(comp.value, options).test(this.value);
      } else if (comp.operator === "") {
        if (comp.value === "") {
          return true;
        }
        return new Range(this.value, options).test(comp.semver);
      }
      options = parseOptions(options);
      if (options.includePrerelease && (this.value === "<0.0.0-0" || comp.value === "<0.0.0-0")) {
        return false;
      }
      if (!options.includePrerelease && (this.value.startsWith("<0.0.0") || comp.value.startsWith("<0.0.0"))) {
        return false;
      }
      if (this.operator.startsWith(">") && comp.operator.startsWith(">")) {
        return true;
      }
      if (this.operator.startsWith("<") && comp.operator.startsWith("<")) {
        return true;
      }
      if (this.semver.version === comp.semver.version && this.operator.includes("=") && comp.operator.includes("=")) {
        return true;
      }
      if (cmp(this.semver, "<", comp.semver, options) && this.operator.startsWith(">") && comp.operator.startsWith("<")) {
        return true;
      }
      if (cmp(this.semver, ">", comp.semver, options) && this.operator.startsWith("<") && comp.operator.startsWith(">")) {
        return true;
      }
      return false;
    }
  }
  module2.exports = Comparator;
  var parseOptions = require_parse_options();
  var { safeRe: re, t } = require_re();
  var cmp = require_cmp();
  var debug = require_debug();
  var SemVer = require_semver();
  var Range = require_range();
});

// editors/vscode/node_modules/semver/classes/range.js
var require_range = __commonJS((exports2, module2) => {
  var SPACE_CHARACTERS = /\s+/g;

  class Range {
    constructor(range, options) {
      options = parseOptions(options);
      if (range instanceof Range) {
        if (range.loose === !!options.loose && range.includePrerelease === !!options.includePrerelease) {
          return range;
        } else {
          return new Range(range.raw, options);
        }
      }
      if (range instanceof Comparator) {
        this.raw = range.value;
        this.set = [[range]];
        this.formatted = undefined;
        return this;
      }
      this.options = options;
      this.loose = !!options.loose;
      this.includePrerelease = !!options.includePrerelease;
      this.raw = range.trim().replace(SPACE_CHARACTERS, " ");
      this.set = this.raw.split("||").map((r) => this.parseRange(r.trim())).filter((c) => c.length);
      if (!this.set.length) {
        throw new TypeError(`Invalid SemVer Range: ${this.raw}`);
      }
      if (this.set.length > 1) {
        const first = this.set[0];
        this.set = this.set.filter((c) => !isNullSet(c[0]));
        if (this.set.length === 0) {
          this.set = [first];
        } else if (this.set.length > 1) {
          for (const c of this.set) {
            if (c.length === 1 && isAny(c[0])) {
              this.set = [c];
              break;
            }
          }
        }
      }
      this.formatted = undefined;
    }
    get range() {
      if (this.formatted === undefined) {
        this.formatted = "";
        for (let i = 0;i < this.set.length; i++) {
          if (i > 0) {
            this.formatted += "||";
          }
          const comps = this.set[i];
          for (let k = 0;k < comps.length; k++) {
            if (k > 0) {
              this.formatted += " ";
            }
            this.formatted += comps[k].toString().trim();
          }
        }
      }
      return this.formatted;
    }
    format() {
      return this.range;
    }
    toString() {
      return this.range;
    }
    parseRange(range) {
      range = range.replace(BUILDSTRIPRE, "");
      const memoOpts = (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) | (this.options.loose && FLAG_LOOSE);
      const memoKey = memoOpts + ":" + range;
      const cached = cache.get(memoKey);
      if (cached) {
        return cached;
      }
      const loose = this.options.loose;
      const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
      range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
      debug("hyphen replace", range);
      range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
      debug("comparator trim", range);
      range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
      debug("tilde trim", range);
      range = range.replace(re[t.CARETTRIM], caretTrimReplace);
      debug("caret trim", range);
      let rangeList = range.split(" ").map((comp) => parseComparator(comp, this.options)).join(" ").split(/\s+/).map((comp) => replaceGTE0(comp, this.options));
      if (loose) {
        rangeList = rangeList.filter((comp) => {
          debug("loose invalid filter", comp, this.options);
          return !!comp.match(re[t.COMPARATORLOOSE]);
        });
      }
      debug("range list", rangeList);
      const rangeMap = new Map;
      const comparators = rangeList.map((comp) => new Comparator(comp, this.options));
      for (const comp of comparators) {
        if (isNullSet(comp)) {
          return [comp];
        }
        rangeMap.set(comp.value, comp);
      }
      if (rangeMap.size > 1 && rangeMap.has("")) {
        rangeMap.delete("");
      }
      const result = [...rangeMap.values()];
      cache.set(memoKey, result);
      return result;
    }
    intersects(range, options) {
      if (!(range instanceof Range)) {
        throw new TypeError("a Range is required");
      }
      return this.set.some((thisComparators) => {
        return isSatisfiable(thisComparators, options) && range.set.some((rangeComparators) => {
          return isSatisfiable(rangeComparators, options) && thisComparators.every((thisComparator) => {
            return rangeComparators.every((rangeComparator) => {
              return thisComparator.intersects(rangeComparator, options);
            });
          });
        });
      });
    }
    test(version) {
      if (!version) {
        return false;
      }
      if (typeof version === "string") {
        try {
          version = new SemVer(version, this.options);
        } catch (er) {
          return false;
        }
      }
      for (let i = 0;i < this.set.length; i++) {
        if (testSet(this.set[i], version, this.options)) {
          return true;
        }
      }
      return false;
    }
  }
  module2.exports = Range;
  var LRU = require_lrucache();
  var cache = new LRU;
  var parseOptions = require_parse_options();
  var Comparator = require_comparator();
  var debug = require_debug();
  var SemVer = require_semver();
  var {
    safeRe: re,
    src,
    t,
    comparatorTrimReplace,
    tildeTrimReplace,
    caretTrimReplace
  } = require_re();
  var { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require_constants();
  var BUILDSTRIPRE = new RegExp(src[t.BUILD], "g");
  var isNullSet = (c) => c.value === "<0.0.0-0";
  var isAny = (c) => c.value === "";
  var isSatisfiable = (comparators, options) => {
    let result = true;
    const remainingComparators = comparators.slice();
    let testComparator = remainingComparators.pop();
    while (result && remainingComparators.length) {
      result = remainingComparators.every((otherComparator) => {
        return testComparator.intersects(otherComparator, options);
      });
      testComparator = remainingComparators.pop();
    }
    return result;
  };
  var parseComparator = (comp, options) => {
    comp = comp.replace(re[t.BUILD], "");
    debug("comp", comp, options);
    comp = replaceCarets(comp, options);
    debug("caret", comp);
    comp = replaceTildes(comp, options);
    debug("tildes", comp);
    comp = replaceXRanges(comp, options);
    debug("xrange", comp);
    comp = replaceStars(comp, options);
    debug("stars", comp);
    return comp;
  };
  var isX = (id) => !id || id.toLowerCase() === "x" || id === "*";
  var invalidXRangeOrder = (M, m, p) => isX(M) && !isX(m) || isX(m) && p && !isX(p);
  var replaceTildes = (comp, options) => {
    return comp.trim().split(/\s+/).map((c) => replaceTilde(c, options)).join(" ");
  };
  var replaceTilde = (comp, options) => {
    const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
    const z = options.includePrerelease ? "-0" : "";
    return comp.replace(r, (_, M, m, p, pr) => {
      debug("tilde", comp, _, M, m, p, pr);
      let ret;
      if (isX(M)) {
        ret = "";
      } else if (isX(m)) {
        ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
      } else if (isX(p)) {
        ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
      } else if (pr) {
        debug("replaceTilde pr", pr);
        ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
      } else {
        ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
      }
      debug("tilde return", ret);
      return ret;
    });
  };
  var replaceCarets = (comp, options) => {
    return comp.trim().split(/\s+/).map((c) => replaceCaret(c, options)).join(" ");
  };
  var replaceCaret = (comp, options) => {
    debug("caret", comp, options);
    const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
    const z = options.includePrerelease ? "-0" : "";
    return comp.replace(r, (_, M, m, p, pr) => {
      debug("caret", comp, _, M, m, p, pr);
      let ret;
      if (isX(M)) {
        ret = "";
      } else if (isX(m)) {
        ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
      } else if (isX(p)) {
        if (M === "0") {
          ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
        } else {
          ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
        }
      } else if (pr) {
        debug("replaceCaret pr", pr);
        if (M === "0") {
          if (m === "0") {
            ret = `>=${M}.${m}.${p}-${pr} <${M}.${m}.${+p + 1}-0`;
          } else {
            ret = `>=${M}.${m}.${p}-${pr} <${M}.${+m + 1}.0-0`;
          }
        } else {
          ret = `>=${M}.${m}.${p}-${pr} <${+M + 1}.0.0-0`;
        }
      } else {
        debug("no pr");
        if (M === "0") {
          if (m === "0") {
            ret = `>=${M}.${m}.${p} <${M}.${m}.${+p + 1}-0`;
          } else {
            ret = `>=${M}.${m}.${p} <${M}.${+m + 1}.0-0`;
          }
        } else {
          ret = `>=${M}.${m}.${p} <${+M + 1}.0.0-0`;
        }
      }
      debug("caret return", ret);
      return ret;
    });
  };
  var replaceXRanges = (comp, options) => {
    debug("replaceXRanges", comp, options);
    return comp.split(/\s+/).map((c) => replaceXRange(c, options)).join(" ");
  };
  var replaceXRange = (comp, options) => {
    comp = comp.trim();
    const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
    return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
      debug("xRange", comp, ret, gtlt, M, m, p, pr);
      if (invalidXRangeOrder(M, m, p)) {
        return comp;
      }
      const xM = isX(M);
      const xm = xM || isX(m);
      const xp = xm || isX(p);
      const anyX = xp;
      if (gtlt === "=" && anyX) {
        gtlt = "";
      }
      pr = options.includePrerelease ? "-0" : "";
      if (xM) {
        if (gtlt === ">" || gtlt === "<") {
          ret = "<0.0.0-0";
        } else {
          ret = "*";
        }
      } else if (gtlt && anyX) {
        if (xm) {
          m = 0;
        }
        p = 0;
        if (gtlt === ">") {
          gtlt = ">=";
          if (xm) {
            M = +M + 1;
            m = 0;
            p = 0;
          } else {
            m = +m + 1;
            p = 0;
          }
        } else if (gtlt === "<=") {
          gtlt = "<";
          if (xm) {
            M = +M + 1;
          } else {
            m = +m + 1;
          }
        }
        if (gtlt === "<") {
          pr = "-0";
        }
        ret = `${gtlt + M}.${m}.${p}${pr}`;
      } else if (xm) {
        ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
      } else if (xp) {
        ret = `>=${M}.${m}.0${pr} <${M}.${+m + 1}.0-0`;
      }
      debug("xRange return", ret);
      return ret;
    });
  };
  var replaceStars = (comp, options) => {
    debug("replaceStars", comp, options);
    return comp.trim().replace(re[t.STAR], "");
  };
  var replaceGTE0 = (comp, options) => {
    debug("replaceGTE0", comp, options);
    return comp.trim().replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], "");
  };
  var hyphenReplace = (incPr) => ($0, from, fM, fm, fp, fpr, fb, to, tM, tm, tp, tpr) => {
    if (isX(fM)) {
      from = "";
    } else if (isX(fm)) {
      from = `>=${fM}.0.0${incPr ? "-0" : ""}`;
    } else if (isX(fp)) {
      from = `>=${fM}.${fm}.0${incPr ? "-0" : ""}`;
    } else if (fpr) {
      from = `>=${from}`;
    } else {
      from = `>=${from}${incPr ? "-0" : ""}`;
    }
    if (isX(tM)) {
      to = "";
    } else if (isX(tm)) {
      to = `<${+tM + 1}.0.0-0`;
    } else if (isX(tp)) {
      to = `<${tM}.${+tm + 1}.0-0`;
    } else if (tpr) {
      to = `<=${tM}.${tm}.${tp}-${tpr}`;
    } else if (incPr) {
      to = `<${tM}.${tm}.${+tp + 1}-0`;
    } else {
      to = `<=${to}`;
    }
    return `${from} ${to}`.trim();
  };
  var testSet = (set, version, options) => {
    for (let i = 0;i < set.length; i++) {
      if (!set[i].test(version)) {
        return false;
      }
    }
    if (version.prerelease.length && !options.includePrerelease) {
      for (let i = 0;i < set.length; i++) {
        debug(set[i].semver);
        if (set[i].semver === Comparator.ANY) {
          continue;
        }
        if (set[i].semver.prerelease.length > 0) {
          const allowed = set[i].semver;
          if (allowed.major === version.major && allowed.minor === version.minor && allowed.patch === version.patch) {
            return true;
          }
        }
      }
      return false;
    }
    return true;
  };
});

// editors/vscode/node_modules/semver/functions/satisfies.js
var require_satisfies = __commonJS((exports2, module2) => {
  var Range = require_range();
  var satisfies = (version, range, options) => {
    try {
      range = new Range(range, options);
    } catch (er) {
      return false;
    }
    return range.test(version);
  };
  module2.exports = satisfies;
});

// editors/vscode/node_modules/vscode-languageclient/lib/common/api.js
var require_api3 = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
    for (var p in m)
      if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
        __createBinding(exports3, m, p);
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.DiagnosticPullMode = exports2.vsdiag = undefined;
  __exportStar(require_api2(), exports2);
  __exportStar(require_features(), exports2);
  var diagnostic_1 = require_diagnostic();
  Object.defineProperty(exports2, "vsdiag", { enumerable: true, get: function() {
    return diagnostic_1.vsdiag;
  } });
  Object.defineProperty(exports2, "DiagnosticPullMode", { enumerable: true, get: function() {
    return diagnostic_1.DiagnosticPullMode;
  } });
  __exportStar(require_client(), exports2);
});

// editors/vscode/node_modules/vscode-languageclient/lib/node/main.js
var require_main5 = __commonJS((exports2) => {
  var __createBinding = exports2 && exports2.__createBinding || (Object.create ? function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() {
        return m[k];
      } };
    }
    Object.defineProperty(o, k2, desc);
  } : function(o, m, k, k2) {
    if (k2 === undefined)
      k2 = k;
    o[k2] = m[k];
  });
  var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
  } : function(o, v) {
    o["default"] = v;
  });
  var __importStar = exports2 && exports2.__importStar || function() {
    var ownKeys = function(o) {
      ownKeys = Object.getOwnPropertyNames || function(o2) {
        var ar = [];
        for (var k in o2)
          if (Object.prototype.hasOwnProperty.call(o2, k))
            ar[ar.length] = k;
        return ar;
      };
      return ownKeys(o);
    };
    return function(mod) {
      if (mod && mod.__esModule)
        return mod;
      var result = {};
      if (mod != null) {
        for (var k = ownKeys(mod), i = 0;i < k.length; i++)
          if (k[i] !== "default")
            __createBinding(result, mod, k[i]);
      }
      __setModuleDefault(result, mod);
      return result;
    };
  }();
  var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
    for (var p in m)
      if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p))
        __createBinding(exports3, m, p);
  };
  Object.defineProperty(exports2, "__esModule", { value: true });
  exports2.SettingMonitor = exports2.LanguageClient = exports2.TransportKind = undefined;
  var cp = __importStar(require("child_process"));
  var fs = __importStar(require("fs"));
  var path = __importStar(require("path"));
  var readline = __importStar(require("readline"));
  var vscode_1 = require("vscode");
  var Is = __importStar(require_is());
  var client_1 = require_client();
  var processes_1 = require_processes();
  var node_1 = require_main4();
  var semverParse = require_parse();
  var semverSatisfies = require_satisfies();
  __exportStar(require_main4(), exports2);
  __exportStar(require_api3(), exports2);
  var REQUIRED_VSCODE_VERSION = "^1.91.0";
  var TransportKind;
  (function(TransportKind2) {
    TransportKind2[TransportKind2["stdio"] = 0] = "stdio";
    TransportKind2[TransportKind2["ipc"] = 1] = "ipc";
    TransportKind2[TransportKind2["pipe"] = 2] = "pipe";
    TransportKind2[TransportKind2["socket"] = 3] = "socket";
  })(TransportKind || (exports2.TransportKind = TransportKind = {}));
  var Transport;
  (function(Transport2) {
    function isSocket(value) {
      const candidate = value;
      return candidate && candidate.kind === TransportKind.socket && Is.number(candidate.port);
    }
    Transport2.isSocket = isSocket;
  })(Transport || (Transport = {}));
  var Executable;
  (function(Executable2) {
    function is(value) {
      return Is.string(value.command);
    }
    Executable2.is = is;
  })(Executable || (Executable = {}));
  var NodeModule;
  (function(NodeModule2) {
    function is(value) {
      return Is.string(value.module);
    }
    NodeModule2.is = is;
  })(NodeModule || (NodeModule = {}));
  var StreamInfo;
  (function(StreamInfo2) {
    function is(value) {
      const candidate = value;
      return candidate && candidate.writer !== undefined && candidate.reader !== undefined;
    }
    StreamInfo2.is = is;
  })(StreamInfo || (StreamInfo = {}));
  var ChildProcessInfo;
  (function(ChildProcessInfo2) {
    function is(value) {
      const candidate = value;
      return candidate && candidate.process !== undefined && typeof candidate.detached === "boolean";
    }
    ChildProcessInfo2.is = is;
  })(ChildProcessInfo || (ChildProcessInfo = {}));

  class LanguageClient extends client_1.BaseLanguageClient {
    _serverOptions;
    _forceDebug;
    _serverProcess;
    _isDetached;
    _isInDebugMode;
    constructor(arg1, arg2, arg3, arg4, arg5) {
      let id;
      let name;
      let serverOptions;
      let clientOptions;
      let forceDebug;
      if (Is.string(arg2)) {
        id = arg1;
        name = arg2;
        serverOptions = arg3;
        clientOptions = arg4;
        forceDebug = !!arg5;
      } else {
        id = arg1.toLowerCase();
        name = arg1;
        serverOptions = arg2;
        clientOptions = arg3;
        forceDebug = arg4;
      }
      if (forceDebug === undefined) {
        forceDebug = false;
      }
      super(id, name, clientOptions);
      this._serverOptions = serverOptions;
      this._forceDebug = forceDebug;
      this._isInDebugMode = forceDebug;
      try {
        this.checkVersion();
      } catch (error) {
        if (Is.string(error.message)) {
          this.outputChannel.appendLine(error.message);
        }
        throw error;
      }
    }
    checkVersion() {
      const codeVersion = semverParse(vscode_1.version);
      if (!codeVersion) {
        throw new Error(`No valid VS Code version detected. Version string is: ${vscode_1.version}`);
      }
      if (codeVersion.prerelease && codeVersion.prerelease.length > 0) {
        codeVersion.prerelease = [];
      }
      if (!semverSatisfies(codeVersion, REQUIRED_VSCODE_VERSION)) {
        throw new Error(`The language client requires VS Code version ${REQUIRED_VSCODE_VERSION} but received version ${vscode_1.version}`);
      }
    }
    get isInDebugMode() {
      return this._isInDebugMode;
    }
    get serverProcess() {
      return this._serverProcess;
    }
    async restart() {
      await this.stop();
      if (this.isInDebugMode) {
        await new Promise((resolve) => setTimeout(resolve, 1000));
        await this.start();
      } else {
        await this.start();
      }
    }
    shutdown(mode, timeout = 2000) {
      return super.shutdown(mode, timeout).finally(() => {
        if (this._serverProcess) {
          const toCheck = this._serverProcess;
          this._serverProcess = undefined;
          if (this._isDetached === undefined || !this._isDetached) {
            this.checkProcessDied(toCheck);
          }
          this._isDetached = undefined;
        }
      });
    }
    checkProcessDied(childProcess) {
      if (!childProcess || childProcess.pid === undefined) {
        return;
      }
      setTimeout(() => {
        try {
          if (childProcess.pid !== undefined) {
            process.kill(childProcess.pid, 0);
            (0, processes_1.terminate)(childProcess);
          }
        } catch (error) {}
      }, 2000);
    }
    handleConnectionClosed() {
      this._serverProcess = undefined;
      return super.handleConnectionClosed();
    }
    fillInitializeParams(params) {
      super.fillInitializeParams(params);
      if (params.processId === null) {
        params.processId = process.pid;
      }
    }
    createMessageTransports(_encoding) {
      function getEnvironment(env, fork) {
        if (!env && !fork) {
          return;
        }
        const result = Object.create(null);
        Object.keys(process.env).forEach((key) => result[key] = process.env[key]);
        if (fork) {
          result["ELECTRON_RUN_AS_NODE"] = "1";
          result["ELECTRON_NO_ASAR"] = "1";
        }
        if (env) {
          Object.keys(env).forEach((key) => result[key] = env[key]);
        }
        return result;
      }
      const debugStartWith = ["--debug=", "--debug-brk=", "--inspect=", "--inspect-brk="];
      const debugEquals = ["--debug", "--debug-brk", "--inspect", "--inspect-brk"];
      function startedInDebugMode() {
        const args = process.execArgv;
        if (args) {
          return args.some((arg) => {
            return debugStartWith.some((value) => arg.startsWith(value)) || debugEquals.some((value) => arg === value);
          });
        }
        return false;
      }
      function assertStdio(process2) {
        if (process2.stdin === null || process2.stdout === null || process2.stderr === null) {
          throw new Error("Process created without stdio streams");
        }
      }
      function pipeStdoutToLogOutputChannel(input, outputChannel) {
        readline.createInterface({
          input,
          crlfDelay: Infinity,
          terminal: false,
          historySize: 0
        }).on("line", (data) => outputChannel.info(data));
      }
      function pipeStderrToLogOutputChannel(input, outputChannel) {
        readline.createInterface({
          input,
          crlfDelay: Infinity,
          terminal: false,
          historySize: 0
        }).on("line", (data) => outputChannel.error(data));
      }
      const server = this._serverOptions;
      if (Is.func(server)) {
        return server().then((result) => {
          if (client_1.MessageTransports.is(result)) {
            this._isDetached = !!result.detached;
            return result;
          } else if (StreamInfo.is(result)) {
            this._isDetached = !!result.detached;
            return { reader: new node_1.StreamMessageReader(result.reader), writer: new node_1.StreamMessageWriter(result.writer) };
          } else {
            let cp2;
            if (ChildProcessInfo.is(result)) {
              cp2 = result.process;
              this._isDetached = result.detached;
            } else {
              cp2 = result;
              this._isDetached = false;
            }
            pipeStderrToLogOutputChannel(cp2.stderr, this.outputChannel);
            return { reader: new node_1.StreamMessageReader(cp2.stdout), writer: new node_1.StreamMessageWriter(cp2.stdin) };
          }
        });
      }
      let json;
      const runDebug = server;
      if (runDebug.run || runDebug.debug) {
        if (this._forceDebug || startedInDebugMode()) {
          json = runDebug.debug;
          this._isInDebugMode = true;
        } else {
          json = runDebug.run;
          this._isInDebugMode = false;
        }
      } else {
        json = server;
      }
      return this._getServerWorkingDir(json.options).then((serverWorkingDir) => {
        if (NodeModule.is(json) && json.module) {
          const node = json;
          const transport = node.transport || TransportKind.stdio;
          if (node.runtime) {
            const args = [];
            const options = node.options ?? Object.create(null);
            if (options.execArgv) {
              options.execArgv.forEach((element) => args.push(element));
            }
            args.push(node.module);
            if (node.args) {
              node.args.forEach((element) => args.push(element));
            }
            const execOptions = Object.create(null);
            execOptions.cwd = serverWorkingDir;
            execOptions.env = getEnvironment(options.env, false);
            const runtime = this._getRuntimePath(node.runtime, serverWorkingDir);
            let pipeName = undefined;
            if (transport === TransportKind.ipc) {
              execOptions.stdio = [null, null, null, "ipc"];
              args.push("--node-ipc");
            } else if (transport === TransportKind.stdio) {
              args.push("--stdio");
            } else if (transport === TransportKind.pipe) {
              pipeName = (0, node_1.generateRandomPipeName)();
              args.push(`--pipe=${pipeName}`);
            } else if (Transport.isSocket(transport)) {
              args.push(`--socket=${transport.port}`);
            }
            args.push(`--clientProcessId=${process.pid.toString()}`);
            if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
              const serverProcess = cp.spawn(runtime, args, execOptions);
              if (!serverProcess || !serverProcess.pid) {
                return handleChildProcessStartError(serverProcess, `Launching server using runtime ${runtime} failed.`);
              }
              this._serverProcess = serverProcess;
              pipeStderrToLogOutputChannel(serverProcess.stderr, this.outputChannel);
              if (transport === TransportKind.ipc) {
                pipeStdoutToLogOutputChannel(serverProcess.stdout, this.outputChannel);
                return Promise.resolve({ reader: new node_1.IPCMessageReader(serverProcess), writer: new node_1.IPCMessageWriter(serverProcess) });
              } else {
                return Promise.resolve({ reader: new node_1.StreamMessageReader(serverProcess.stdout), writer: new node_1.StreamMessageWriter(serverProcess.stdin) });
              }
            } else if (transport === TransportKind.pipe) {
              return (0, node_1.createClientPipeTransport)(pipeName).then((transport2) => {
                const process2 = cp.spawn(runtime, args, execOptions);
                if (!process2 || !process2.pid) {
                  return handleChildProcessStartError(process2, `Launching server using runtime ${runtime} failed.`);
                }
                this._serverProcess = process2;
                pipeStderrToLogOutputChannel(process2.stderr, this.outputChannel);
                pipeStdoutToLogOutputChannel(process2.stdout, this.outputChannel);
                return transport2.onConnected().then((protocol) => {
                  return { reader: protocol[0], writer: protocol[1] };
                });
              });
            } else if (Transport.isSocket(transport)) {
              return (0, node_1.createClientSocketTransport)(transport.port).then((transport2) => {
                const process2 = cp.spawn(runtime, args, execOptions);
                if (!process2 || !process2.pid) {
                  return handleChildProcessStartError(process2, `Launching server using runtime ${runtime} failed.`);
                }
                this._serverProcess = process2;
                pipeStderrToLogOutputChannel(process2.stderr, this.outputChannel);
                pipeStdoutToLogOutputChannel(process2.stdout, this.outputChannel);
                return transport2.onConnected().then((protocol) => {
                  return { reader: protocol[0], writer: protocol[1] };
                });
              });
            }
          } else {
            let pipeName = undefined;
            return new Promise((resolve, reject) => {
              const args = (node.args && node.args.slice()) ?? [];
              if (transport === TransportKind.ipc) {
                args.push("--node-ipc");
              } else if (transport === TransportKind.stdio) {
                args.push("--stdio");
              } else if (transport === TransportKind.pipe) {
                pipeName = (0, node_1.generateRandomPipeName)();
                args.push(`--pipe=${pipeName}`);
              } else if (Transport.isSocket(transport)) {
                args.push(`--socket=${transport.port}`);
              }
              args.push(`--clientProcessId=${process.pid.toString()}`);
              const options = node.options ? { ...node.options } : Object.create(null);
              options.env = getEnvironment(options.env, true);
              options.execArgv = options.execArgv || [];
              options.cwd = serverWorkingDir;
              options.silent = true;
              if (transport === TransportKind.ipc || transport === TransportKind.stdio) {
                const sp = cp.fork(node.module, args || [], options);
                assertStdio(sp);
                this._serverProcess = sp;
                pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
                if (transport === TransportKind.ipc) {
                  pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
                  resolve({ reader: new node_1.IPCMessageReader(this._serverProcess), writer: new node_1.IPCMessageWriter(this._serverProcess) });
                } else {
                  resolve({ reader: new node_1.StreamMessageReader(sp.stdout), writer: new node_1.StreamMessageWriter(sp.stdin) });
                }
              } else if (transport === TransportKind.pipe) {
                (0, node_1.createClientPipeTransport)(pipeName).then((transport2) => {
                  const sp = cp.fork(node.module, args || [], options);
                  assertStdio(sp);
                  this._serverProcess = sp;
                  pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
                  pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
                  transport2.onConnected().then((protocol) => {
                    resolve({ reader: protocol[0], writer: protocol[1] });
                  }, reject);
                }, reject);
              } else if (Transport.isSocket(transport)) {
                (0, node_1.createClientSocketTransport)(transport.port).then((transport2) => {
                  const sp = cp.fork(node.module, args || [], options);
                  assertStdio(sp);
                  this._serverProcess = sp;
                  pipeStderrToLogOutputChannel(sp.stderr, this.outputChannel);
                  pipeStdoutToLogOutputChannel(sp.stdout, this.outputChannel);
                  transport2.onConnected().then((protocol) => {
                    resolve({ reader: protocol[0], writer: protocol[1] });
                  }, reject);
                }, reject);
              }
            });
          }
        } else if (Executable.is(json) && json.command) {
          const command = json;
          const args = json.args !== undefined ? json.args.slice(0) : [];
          let pipeName = undefined;
          const transport = json.transport;
          if (transport === TransportKind.stdio) {
            args.push("--stdio");
          } else if (transport === TransportKind.pipe) {
            pipeName = (0, node_1.generateRandomPipeName)();
            args.push(`--pipe=${pipeName}`);
          } else if (Transport.isSocket(transport)) {
            args.push(`--socket=${transport.port}`);
          } else if (transport === TransportKind.ipc) {
            throw new Error(`Transport kind ipc is not support for command executable`);
          }
          const options = Object.assign({}, command.options);
          options.cwd = options.cwd || serverWorkingDir;
          if (transport === undefined || transport === TransportKind.stdio) {
            const serverProcess = cp.spawn(command.command, args, options);
            if (!serverProcess || !serverProcess.pid) {
              return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);
            }
            pipeStderrToLogOutputChannel(serverProcess.stderr, this.outputChannel);
            this._serverProcess = serverProcess;
            this._isDetached = !!options.detached;
            return Promise.resolve({ reader: new node_1.StreamMessageReader(serverProcess.stdout), writer: new node_1.StreamMessageWriter(serverProcess.stdin) });
          } else if (transport === TransportKind.pipe) {
            return (0, node_1.createClientPipeTransport)(pipeName).then((transport2) => {
              const serverProcess = cp.spawn(command.command, args, options);
              if (!serverProcess || !serverProcess.pid) {
                return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);
              }
              this._serverProcess = serverProcess;
              this._isDetached = !!options.detached;
              pipeStderrToLogOutputChannel(serverProcess.stderr, this.outputChannel);
              pipeStdoutToLogOutputChannel(serverProcess.stdout, this.outputChannel);
              return transport2.onConnected().then((protocol) => {
                return { reader: protocol[0], writer: protocol[1] };
              });
            });
          } else if (Transport.isSocket(transport)) {
            return (0, node_1.createClientSocketTransport)(transport.port).then((transport2) => {
              const serverProcess = cp.spawn(command.command, args, options);
              if (!serverProcess || !serverProcess.pid) {
                return handleChildProcessStartError(serverProcess, `Launching server using command ${command.command} failed.`);
              }
              this._serverProcess = serverProcess;
              this._isDetached = !!options.detached;
              pipeStderrToLogOutputChannel(serverProcess.stderr, this.outputChannel);
              pipeStdoutToLogOutputChannel(serverProcess.stdout, this.outputChannel);
              return transport2.onConnected().then((protocol) => {
                return { reader: protocol[0], writer: protocol[1] };
              });
            });
          }
        }
        return Promise.reject(new Error(`Unsupported server configuration ` + JSON.stringify(server, null, 4)));
      }).finally(() => {
        if (this._serverProcess !== undefined) {
          this._serverProcess.on("exit", (code, signal) => {
            if (code === 0) {
              this.info("Server process exited successfully", undefined, false);
            } else if (code !== null) {
              this.error(`Server process exited with code ${code}.`, undefined, false);
            }
            if (signal !== null) {
              this.error(`Server process exited with signal ${signal}.`, undefined, false);
            }
          });
        }
      });
    }
    _getRuntimePath(runtime, serverWorkingDirectory) {
      if (path.isAbsolute(runtime)) {
        return runtime;
      }
      const mainRootPath = this._mainGetRootPath();
      if (mainRootPath !== undefined) {
        const result = path.join(mainRootPath, runtime);
        if (fs.existsSync(result)) {
          return result;
        }
      }
      if (serverWorkingDirectory !== undefined) {
        const result = path.join(serverWorkingDirectory, runtime);
        if (fs.existsSync(result)) {
          return result;
        }
      }
      return runtime;
    }
    _mainGetRootPath() {
      const folders = vscode_1.workspace.workspaceFolders;
      if (!folders || folders.length === 0) {
        return;
      }
      const folder = folders[0];
      if (folder.uri.scheme === "file") {
        return folder.uri.fsPath;
      }
      return;
    }
    _getServerWorkingDir(options) {
      let cwd = options && options.cwd;
      if (!cwd) {
        cwd = this.clientOptions.workspaceFolder ? this.clientOptions.workspaceFolder.uri.fsPath : this._mainGetRootPath();
      }
      if (cwd) {
        return new Promise((s) => {
          fs.lstat(cwd, (err, stats) => {
            s(!err && stats.isDirectory() ? cwd : undefined);
          });
        });
      }
      return Promise.resolve(undefined);
    }
  }
  exports2.LanguageClient = LanguageClient;

  class SettingMonitor {
    _client;
    _setting;
    _listeners;
    constructor(_client, _setting) {
      this._client = _client;
      this._setting = _setting;
      this._listeners = [];
    }
    start() {
      vscode_1.workspace.onDidChangeConfiguration(this.onDidChangeConfiguration, this, this._listeners);
      this.onDidChangeConfiguration();
      return new vscode_1.Disposable(() => {
        if (this._client.needsStop()) {
          this._client.stop();
        }
      });
    }
    onDidChangeConfiguration() {
      const index = this._setting.indexOf(".");
      const primary = index >= 0 ? this._setting.substr(0, index) : this._setting;
      const rest = index >= 0 ? this._setting.substr(index + 1) : undefined;
      const enabled = rest ? vscode_1.workspace.getConfiguration(primary).get(rest, false) : vscode_1.workspace.getConfiguration(primary);
      if (enabled && this._client.needsStart()) {
        this._client.start().catch((error) => this._client.error("Start failed after configuration change", error, "force"));
      } else if (!enabled && this._client.needsStop()) {
        this._client.stop().catch((error) => this._client.error("Stop failed after configuration change", error, "force"));
      }
    }
  }
  exports2.SettingMonitor = SettingMonitor;
  function handleChildProcessStartError(process2, message) {
    if (process2 === null) {
      return Promise.reject(message);
    }
    return new Promise((_, reject) => {
      process2.on("error", (err) => {
        reject(`${message} ${err}`);
      });
      setImmediate(() => reject(message));
    });
  }
});

// editors/vscode/src/extension.js
var path = require("node:path");
var vscode = require("vscode");
var { LanguageClient, TransportKind } = require_main5();
var WRN_LANGUAGE_ID = "wrn";
var client;
async function recoverWrnLanguage(document) {
  if (!document.fileName.toLowerCase().endsWith(".wrn"))
    return;
  if (!["plaintext", "wire"].includes(document.languageId))
    return;
  try {
    await vscode.languages.setTextDocumentLanguage(document, WRN_LANGUAGE_ID);
  } catch (error) {
    console.warn("[wrnexus] unable to recover .wrn language association:", error instanceof Error ? error.message : String(error));
  }
}
async function activate(context) {
  for (const document of vscode.workspace.textDocuments)
    recoverWrnLanguage(document);
  context.subscriptions.push(vscode.workspace.onDidOpenTextDocument((document) => void recoverWrnLanguage(document)));
  if (!vscode.workspace.getConfiguration("wrnexus").get("languageServer.enable", true))
    return;
  const module2 = path.join(context.extensionPath, "src", "language-server.cjs");
  client = new LanguageClient("wrnexusLanguageServer", "WRNexus Language Server", {
    run: { module: module2, transport: TransportKind.stdio },
    debug: { module: module2, transport: TransportKind.stdio, options: { execArgv: ["--nolazy"] } }
  }, { documentSelector: [{ scheme: "file", language: WRN_LANGUAGE_ID }] });
  await client.start();
}
async function deactivate() {
  const running = client;
  client = undefined;
  if (running)
    await running.stop();
}
module.exports = { activate, deactivate, recoverWrnLanguage };
