UNPKG

monaco-editor

Version:
1,551 lines 1.24 MB
(function() { "use strict"; var _a2, _b, _c2; class ErrorHandler { constructor() { this.listeners = []; this.unexpectedErrorHandler = function(e) { setTimeout(() => { if (e.stack) { if (ErrorNoTelemetry.isErrorNoTelemetry(e)) { throw new ErrorNoTelemetry(e.message + "\n\n" + e.stack); } throw new Error(e.message + "\n\n" + e.stack); } throw e; }, 0); }; } emit(e) { this.listeners.forEach((listener) => { listener(e); }); } onUnexpectedError(e) { this.unexpectedErrorHandler(e); this.emit(e); } // For external errors, we don't want the listeners to be called onUnexpectedExternalError(e) { this.unexpectedErrorHandler(e); } } const errorHandler = new ErrorHandler(); function onUnexpectedError(e) { if (!isCancellationError(e)) { errorHandler.onUnexpectedError(e); } return void 0; } function transformErrorForSerialization(error) { if (error instanceof Error) { const { name, message, cause } = error; const stack = error.stacktrace || error.stack; return { $isError: true, name, message, stack, noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error), cause: cause ? transformErrorForSerialization(cause) : void 0, code: error.code }; } return error; } const canceledName = "Canceled"; function isCancellationError(error) { if (error instanceof CancellationError) { return true; } return error instanceof Error && error.name === canceledName && error.message === canceledName; } class CancellationError extends Error { constructor() { super(canceledName); this.name = this.message; } } class ErrorNoTelemetry extends Error { constructor(msg) { super(msg); this.name = "CodeExpectedError"; } static fromError(err) { if (err instanceof ErrorNoTelemetry) { return err; } const result = new ErrorNoTelemetry(); result.message = err.message; result.stack = err.stack; return result; } static isErrorNoTelemetry(err) { return err.name === "CodeExpectedError"; } } class BugIndicatingError extends Error { constructor(message) { super(message || "An unexpected bug occurred."); Object.setPrototypeOf(this, BugIndicatingError.prototype); } } function assertNever(value, message = "Unreachable") { throw new Error(message); } function assert(condition, messageOrError = "unexpected state") { if (!condition) { const errorToThrow = typeof messageOrError === "string" ? new BugIndicatingError(`Assertion Failed: ${messageOrError}`) : messageOrError; throw errorToThrow; } } function assertFn(condition) { if (!condition()) { debugger; condition(); onUnexpectedError(new BugIndicatingError("Assertion Failed")); } } function checkAdjacentItems(items, predicate) { let i = 0; while (i < items.length - 1) { const a = items[i]; const b = items[i + 1]; if (!predicate(a, b)) { return false; } i++; } return true; } function isString(str) { return typeof str === "string"; } function isIterable(obj) { return !!obj && typeof obj[Symbol.iterator] === "function"; } var Iterable; (function(Iterable2) { function is(thing) { return !!thing && typeof thing === "object" && typeof thing[Symbol.iterator] === "function"; } Iterable2.is = is; const _empty2 = Object.freeze([]); function empty() { return _empty2; } Iterable2.empty = empty; function* single(element) { yield element; } Iterable2.single = single; function wrap(iterableOrElement) { if (is(iterableOrElement)) { return iterableOrElement; } else { return single(iterableOrElement); } } Iterable2.wrap = wrap; function from(iterable) { return iterable || _empty2; } Iterable2.from = from; function* reverse(array) { for (let i = array.length - 1; i >= 0; i--) { yield array[i]; } } Iterable2.reverse = reverse; function isEmpty(iterable) { return !iterable || iterable[Symbol.iterator]().next().done === true; } Iterable2.isEmpty = isEmpty; function first(iterable) { return iterable[Symbol.iterator]().next().value; } Iterable2.first = first; function some(iterable, predicate) { let i = 0; for (const element of iterable) { if (predicate(element, i++)) { return true; } } return false; } Iterable2.some = some; function every(iterable, predicate) { let i = 0; for (const element of iterable) { if (!predicate(element, i++)) { return false; } } return true; } Iterable2.every = every; function find(iterable, predicate) { for (const element of iterable) { if (predicate(element)) { return element; } } return void 0; } Iterable2.find = find; function* filter(iterable, predicate) { for (const element of iterable) { if (predicate(element)) { yield element; } } } Iterable2.filter = filter; function* map(iterable, fn) { let index = 0; for (const element of iterable) { yield fn(element, index++); } } Iterable2.map = map; function* flatMap(iterable, fn) { let index = 0; for (const element of iterable) { yield* fn(element, index++); } } Iterable2.flatMap = flatMap; function* concat(...iterables) { for (const item of iterables) { if (isIterable(item)) { yield* item; } else { yield item; } } } Iterable2.concat = concat; function reduce(iterable, reducer, initialValue) { let value = initialValue; for (const element of iterable) { value = reducer(value, element); } return value; } Iterable2.reduce = reduce; function length(iterable) { let count = 0; for (const _ of iterable) { count++; } return count; } Iterable2.length = length; function* slice(arr, from2, to = arr.length) { if (from2 < -arr.length) { from2 = 0; } if (from2 < 0) { from2 += arr.length; } if (to < 0) { to += arr.length; } else if (to > arr.length) { to = arr.length; } for (; from2 < to; from2++) { yield arr[from2]; } } Iterable2.slice = slice; function consume(iterable, atMost = Number.POSITIVE_INFINITY) { const consumed = []; if (atMost === 0) { return [consumed, iterable]; } const iterator = iterable[Symbol.iterator](); for (let i = 0; i < atMost; i++) { const next = iterator.next(); if (next.done) { return [consumed, Iterable2.empty()]; } consumed.push(next.value); } return [consumed, { [Symbol.iterator]() { return iterator; } }]; } Iterable2.consume = consume; async function asyncToArray(iterable) { const result = []; for await (const item of iterable) { result.push(item); } return result; } Iterable2.asyncToArray = asyncToArray; async function asyncToArrayFlat(iterable) { let result = []; for await (const item of iterable) { result = result.concat(item); } return result; } Iterable2.asyncToArrayFlat = asyncToArrayFlat; })(Iterable || (Iterable = {})); function setParentOfDisposable(child, parent) { } function dispose(arg) { if (Iterable.is(arg)) { const errors = []; for (const d of arg) { if (d) { try { d.dispose(); } catch (e) { errors.push(e); } } } if (errors.length === 1) { throw errors[0]; } else if (errors.length > 1) { throw new AggregateError(errors, "Encountered errors while disposing of store"); } return Array.isArray(arg) ? [] : arg; } else if (arg) { arg.dispose(); return arg; } } function combinedDisposable(...disposables) { const parent = toDisposable(() => dispose(disposables)); return parent; } class FunctionDisposable { constructor(fn) { this._isDisposed = false; this._fn = fn; } dispose() { if (this._isDisposed) { return; } if (!this._fn) { throw new Error(`Unbound disposable context: Need to use an arrow function to preserve the value of this`); } this._isDisposed = true; this._fn(); } } function toDisposable(fn) { return new FunctionDisposable(fn); } const _DisposableStore = class _DisposableStore { constructor() { this._toDispose = /* @__PURE__ */ new Set(); this._isDisposed = false; } /** * Dispose of all registered disposables and mark this object as disposed. * * Any future disposables added to this object will be disposed of on `add`. */ dispose() { if (this._isDisposed) { return; } this._isDisposed = true; this.clear(); } /** * @return `true` if this object has been disposed of. */ get isDisposed() { return this._isDisposed; } /** * Dispose of all registered disposables but do not mark this object as disposed. */ clear() { if (this._toDispose.size === 0) { return; } try { dispose(this._toDispose); } finally { this._toDispose.clear(); } } /** * Add a new {@link IDisposable disposable} to the collection. */ add(o) { if (!o || o === Disposable.None) { return o; } if (o === this) { throw new Error("Cannot register a disposable on itself!"); } if (this._isDisposed) { if (!_DisposableStore.DISABLE_DISPOSED_WARNING) { console.warn(new Error("Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!").stack); } } else { this._toDispose.add(o); } return o; } /** * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the * disposable even when the disposable is not part in the store. */ delete(o) { if (!o) { return; } if (o === this) { throw new Error("Cannot dispose a disposable on itself!"); } this._toDispose.delete(o); o.dispose(); } }; _DisposableStore.DISABLE_DISPOSED_WARNING = false; let DisposableStore = _DisposableStore; const _Disposable = class _Disposable { constructor() { this._store = new DisposableStore(); setParentOfDisposable(this._store); } dispose() { this._store.dispose(); } /** * Adds `o` to the collection of disposables managed by this object. */ _register(o) { if (o === this) { throw new Error("Cannot register a disposable on itself!"); } return this._store.add(o); } }; _Disposable.None = Object.freeze({ dispose() { } }); let Disposable = _Disposable; let Node$1 = (_a2 = class { constructor(element) { this.element = element; this.next = _a2.Undefined; this.prev = _a2.Undefined; } }, _a2.Undefined = new _a2(void 0), _a2); class LinkedList { constructor() { this._first = Node$1.Undefined; this._last = Node$1.Undefined; this._size = 0; } get size() { return this._size; } isEmpty() { return this._first === Node$1.Undefined; } clear() { let node = this._first; while (node !== Node$1.Undefined) { const next = node.next; node.prev = Node$1.Undefined; node.next = Node$1.Undefined; node = next; } this._first = Node$1.Undefined; this._last = Node$1.Undefined; this._size = 0; } unshift(element) { return this._insert(element, false); } push(element) { return this._insert(element, true); } _insert(element, atTheEnd) { const newNode = new Node$1(element); if (this._first === Node$1.Undefined) { this._first = newNode; this._last = newNode; } else if (atTheEnd) { const oldLast = this._last; this._last = newNode; newNode.prev = oldLast; oldLast.next = newNode; } else { const oldFirst = this._first; this._first = newNode; newNode.next = oldFirst; oldFirst.prev = newNode; } this._size += 1; let didRemove = false; return () => { if (!didRemove) { didRemove = true; this._remove(newNode); } }; } shift() { if (this._first === Node$1.Undefined) { return void 0; } else { const res = this._first.element; this._remove(this._first); return res; } } pop() { if (this._last === Node$1.Undefined) { return void 0; } else { const res = this._last.element; this._remove(this._last); return res; } } _remove(node) { if (node.prev !== Node$1.Undefined && node.next !== Node$1.Undefined) { const anchor = node.prev; anchor.next = node.next; node.next.prev = anchor; } else if (node.prev === Node$1.Undefined && node.next === Node$1.Undefined) { this._first = Node$1.Undefined; this._last = Node$1.Undefined; } else if (node.next === Node$1.Undefined) { this._last = this._last.prev; this._last.next = Node$1.Undefined; } else if (node.prev === Node$1.Undefined) { this._first = this._first.next; this._first.prev = Node$1.Undefined; } this._size -= 1; } *[Symbol.iterator]() { let node = this._first; while (node !== Node$1.Undefined) { yield node.element; node = node.next; } } } const performanceNow = globalThis.performance.now.bind(globalThis.performance); class StopWatch { static create(highResolution) { return new StopWatch(highResolution); } constructor(highResolution) { this._now = highResolution === false ? Date.now : performanceNow; this._startTime = this._now(); this._stopTime = -1; } stop() { this._stopTime = this._now(); } reset() { this._startTime = this._now(); this._stopTime = -1; } elapsed() { if (this._stopTime !== -1) { return this._stopTime - this._startTime; } return this._now() - this._startTime; } } var Event; (function(Event2) { Event2.None = () => Disposable.None; function defer(event, disposable) { return debounce(event, () => void 0, 0, void 0, true, void 0, disposable); } Event2.defer = defer; function once(event) { return (listener, thisArgs = null, disposables) => { let didFire = false; let result = void 0; result = event((e) => { if (didFire) { return; } else if (result) { result.dispose(); } else { didFire = true; } return listener.call(thisArgs, e); }, null, disposables); if (didFire) { result.dispose(); } return result; }; } Event2.once = once; function onceIf(event, condition) { return Event2.once(Event2.filter(event, condition)); } Event2.onceIf = onceIf; function map(event, map2, disposable) { return snapshot((listener, thisArgs = null, disposables) => event((i) => listener.call(thisArgs, map2(i)), null, disposables), disposable); } Event2.map = map; function forEach(event, each, disposable) { return snapshot((listener, thisArgs = null, disposables) => event((i) => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable); } Event2.forEach = forEach; function filter(event, filter2, disposable) { return snapshot((listener, thisArgs = null, disposables) => event((e) => filter2(e) && listener.call(thisArgs, e), null, disposables), disposable); } Event2.filter = filter; function signal(event) { return event; } Event2.signal = signal; function any(...events) { return (listener, thisArgs = null, disposables) => { const disposable = combinedDisposable(...events.map((event) => event((e) => listener.call(thisArgs, e)))); return addAndReturnDisposable(disposable, disposables); }; } Event2.any = any; function reduce(event, merge, initial, disposable) { let output = initial; return map(event, (e) => { output = merge(output, e); return output; }, disposable); } Event2.reduce = reduce; function snapshot(event, disposable) { let listener; const options = { onWillAddFirstListener() { listener = event(emitter.fire, emitter); }, onDidRemoveLastListener() { listener?.dispose(); } }; const emitter = new Emitter(options); disposable?.add(emitter); return emitter.event; } function addAndReturnDisposable(d, store) { if (store instanceof Array) { store.push(d); } else if (store) { store.add(d); } return d; } function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) { let subscription; let output = void 0; let handle = void 0; let numDebouncedCalls = 0; let doFire; const options = { leakWarningThreshold, onWillAddFirstListener() { subscription = event((cur) => { numDebouncedCalls++; output = merge(output, cur); if (leading && !handle) { emitter.fire(output); output = void 0; } doFire = () => { const _output = output; output = void 0; handle = void 0; if (!leading || numDebouncedCalls > 1) { emitter.fire(_output); } numDebouncedCalls = 0; }; if (typeof delay === "number") { if (handle) { clearTimeout(handle); } handle = setTimeout(doFire, delay); } else { if (handle === void 0) { handle = null; queueMicrotask(doFire); } } }); }, onWillRemoveListener() { if (flushOnListenerRemove && numDebouncedCalls > 0) { doFire?.(); } }, onDidRemoveLastListener() { doFire = void 0; subscription.dispose(); } }; const emitter = new Emitter(options); disposable?.add(emitter); return emitter.event; } Event2.debounce = debounce; function accumulate(event, delay = 0, disposable) { return Event2.debounce(event, (last, e) => { if (!last) { return [e]; } last.push(e); return last; }, delay, void 0, true, void 0, disposable); } Event2.accumulate = accumulate; function latch(event, equals2 = (a, b) => a === b, disposable) { let firstCall = true; let cache; return filter(event, (value) => { const shouldEmit = firstCall || !equals2(value, cache); firstCall = false; cache = value; return shouldEmit; }, disposable); } Event2.latch = latch; function split(event, isT, disposable) { return [ Event2.filter(event, isT, disposable), Event2.filter(event, (e) => !isT(e), disposable) ]; } Event2.split = split; function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) { let buffer2 = _buffer.slice(); let listener = event((e) => { if (buffer2) { buffer2.push(e); } else { emitter.fire(e); } }); if (disposable) { disposable.add(listener); } const flush = () => { buffer2?.forEach((e) => emitter.fire(e)); buffer2 = null; }; const emitter = new Emitter({ onWillAddFirstListener() { if (!listener) { listener = event((e) => emitter.fire(e)); if (disposable) { disposable.add(listener); } } }, onDidAddFirstListener() { if (buffer2) { if (flushAfterTimeout) { setTimeout(flush); } else { flush(); } } }, onDidRemoveLastListener() { if (listener) { listener.dispose(); } listener = null; } }); if (disposable) { disposable.add(emitter); } return emitter.event; } Event2.buffer = buffer; function chain(event, sythensize) { const fn = (listener, thisArgs, disposables) => { const cs = sythensize(new ChainableSynthesis()); return event(function(value) { const result = cs.evaluate(value); if (result !== HaltChainable) { listener.call(thisArgs, result); } }, void 0, disposables); }; return fn; } Event2.chain = chain; const HaltChainable = Symbol("HaltChainable"); class ChainableSynthesis { constructor() { this.steps = []; } map(fn) { this.steps.push(fn); return this; } forEach(fn) { this.steps.push((v) => { fn(v); return v; }); return this; } filter(fn) { this.steps.push((v) => fn(v) ? v : HaltChainable); return this; } reduce(merge, initial) { let last = initial; this.steps.push((v) => { last = merge(last, v); return last; }); return this; } latch(equals2 = (a, b) => a === b) { let firstCall = true; let cache; this.steps.push((value) => { const shouldEmit = firstCall || !equals2(value, cache); firstCall = false; cache = value; return shouldEmit ? value : HaltChainable; }); return this; } evaluate(value) { for (const step of this.steps) { value = step(value); if (value === HaltChainable) { break; } } return value; } } function fromNodeEventEmitter(emitter, eventName, map2 = (id) => id) { const fn = (...args) => result.fire(map2(...args)); const onFirstListenerAdd = () => emitter.on(eventName, fn); const onLastListenerRemove = () => emitter.removeListener(eventName, fn); const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove }); return result.event; } Event2.fromNodeEventEmitter = fromNodeEventEmitter; function fromDOMEventEmitter(emitter, eventName, map2 = (id) => id) { const fn = (...args) => result.fire(map2(...args)); const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn); const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn); const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove }); return result.event; } Event2.fromDOMEventEmitter = fromDOMEventEmitter; function toPromise(event, disposables) { let cancelRef; const promise = new Promise((resolve, reject) => { const listener = once(event)(resolve, null, disposables); cancelRef = () => listener.dispose(); }); promise.cancel = cancelRef; return promise; } Event2.toPromise = toPromise; function forward(from, to) { return from((e) => to.fire(e)); } Event2.forward = forward; function runAndSubscribe(event, handler, initial) { handler(initial); return event((e) => handler(e)); } Event2.runAndSubscribe = runAndSubscribe; class EmitterObserver { constructor(_observable, store) { this._observable = _observable; this._counter = 0; this._hasChanged = false; const options = { onWillAddFirstListener: () => { _observable.addObserver(this); this._observable.reportChanges(); }, onDidRemoveLastListener: () => { _observable.removeObserver(this); } }; this.emitter = new Emitter(options); if (store) { store.add(this.emitter); } } beginUpdate(_observable) { this._counter++; } handlePossibleChange(_observable) { } handleChange(_observable, _change) { this._hasChanged = true; } endUpdate(_observable) { this._counter--; if (this._counter === 0) { this._observable.reportChanges(); if (this._hasChanged) { this._hasChanged = false; this.emitter.fire(this._observable.get()); } } } } function fromObservable(obs, store) { const observer = new EmitterObserver(obs, store); return observer.emitter.event; } Event2.fromObservable = fromObservable; function fromObservableLight(observable) { return (listener, thisArgs, disposables) => { let count = 0; let didChange = false; const observer = { beginUpdate() { count++; }, endUpdate() { count--; if (count === 0) { observable.reportChanges(); if (didChange) { didChange = false; listener.call(thisArgs); } } }, handlePossibleChange() { }, handleChange() { didChange = true; } }; observable.addObserver(observer); observable.reportChanges(); const disposable = { dispose() { observable.removeObserver(observer); } }; if (disposables instanceof DisposableStore) { disposables.add(disposable); } else if (Array.isArray(disposables)) { disposables.push(disposable); } return disposable; }; } Event2.fromObservableLight = fromObservableLight; })(Event || (Event = {})); const _EventProfiling = class _EventProfiling { constructor(name) { this.listenerCount = 0; this.invocationCount = 0; this.elapsedOverall = 0; this.durations = []; this.name = `${name}_${_EventProfiling._idPool++}`; _EventProfiling.all.add(this); } start(listenerCount) { this._stopWatch = new StopWatch(); this.listenerCount = listenerCount; } stop() { if (this._stopWatch) { const elapsed = this._stopWatch.elapsed(); this.durations.push(elapsed); this.elapsedOverall += elapsed; this.invocationCount += 1; this._stopWatch = void 0; } } }; _EventProfiling.all = /* @__PURE__ */ new Set(); _EventProfiling._idPool = 0; let EventProfiling = _EventProfiling; let _globalLeakWarningThreshold = -1; const _LeakageMonitor = class _LeakageMonitor { constructor(_errorHandler, threshold, name = (_LeakageMonitor._idPool++).toString(16).padStart(3, "0")) { this._errorHandler = _errorHandler; this.threshold = threshold; this.name = name; this._warnCountdown = 0; } dispose() { this._stacks?.clear(); } check(stack, listenerCount) { const threshold = this.threshold; if (threshold <= 0 || listenerCount < threshold) { return void 0; } if (!this._stacks) { this._stacks = /* @__PURE__ */ new Map(); } const count = this._stacks.get(stack.value) || 0; this._stacks.set(stack.value, count + 1); this._warnCountdown -= 1; if (this._warnCountdown <= 0) { this._warnCountdown = threshold * 0.5; const [topStack, topCount] = this.getMostFrequentStack(); const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`; console.warn(message); console.warn(topStack); const error = new ListenerLeakError(message, topStack); this._errorHandler(error); } return () => { const count2 = this._stacks.get(stack.value) || 0; this._stacks.set(stack.value, count2 - 1); }; } getMostFrequentStack() { if (!this._stacks) { return void 0; } let topStack; let topCount = 0; for (const [stack, count] of this._stacks) { if (!topStack || topCount < count) { topStack = [stack, count]; topCount = count; } } return topStack; } }; _LeakageMonitor._idPool = 1; let LeakageMonitor = _LeakageMonitor; class Stacktrace { static create() { const err = new Error(); return new Stacktrace(err.stack ?? ""); } constructor(value) { this.value = value; } print() { console.warn(this.value.split("\n").slice(2).join("\n")); } } class ListenerLeakError extends Error { constructor(message, stack) { super(message); this.name = "ListenerLeakError"; this.stack = stack; } } class ListenerRefusalError extends Error { constructor(message, stack) { super(message); this.name = "ListenerRefusalError"; this.stack = stack; } } class UniqueContainer { constructor(value) { this.value = value; } } const compactionThreshold = 2; class Emitter { constructor(options) { this._size = 0; this._options = options; this._leakageMon = this._options?.leakWarningThreshold ? new LeakageMonitor(options?.onListenerError ?? onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) : void 0; this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : void 0; this._deliveryQueue = this._options?.deliveryQueue; } dispose() { if (!this._disposed) { this._disposed = true; if (this._deliveryQueue?.current === this) { this._deliveryQueue.reset(); } if (this._listeners) { this._listeners = void 0; this._size = 0; } this._options?.onDidRemoveLastListener?.(); this._leakageMon?.dispose(); } } /** * For the public to allow to subscribe * to events from this Emitter */ get event() { this._event ??= (callback, thisArgs, disposables) => { if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) { const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`; console.warn(message); const tuple = this._leakageMon.getMostFrequentStack() ?? ["UNKNOWN stack", -1]; const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]); const errorHandler2 = this._options?.onListenerError || onUnexpectedError; errorHandler2(error); return Disposable.None; } if (this._disposed) { return Disposable.None; } if (thisArgs) { callback = callback.bind(thisArgs); } const contained = new UniqueContainer(callback); let removeMonitor; if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) { contained.stack = Stacktrace.create(); removeMonitor = this._leakageMon.check(contained.stack, this._size + 1); } if (!this._listeners) { this._options?.onWillAddFirstListener?.(this); this._listeners = contained; this._options?.onDidAddFirstListener?.(this); } else if (this._listeners instanceof UniqueContainer) { this._deliveryQueue ??= new EventDeliveryQueuePrivate(); this._listeners = [this._listeners, contained]; } else { this._listeners.push(contained); } this._options?.onDidAddListener?.(this); this._size++; const result = toDisposable(() => { removeMonitor?.(); this._removeListener(contained); }); if (disposables instanceof DisposableStore) { disposables.add(result); } else if (Array.isArray(disposables)) { disposables.push(result); } return result; }; return this._event; } _removeListener(listener) { this._options?.onWillRemoveListener?.(this); if (!this._listeners) { return; } if (this._size === 1) { this._listeners = void 0; this._options?.onDidRemoveLastListener?.(this); this._size = 0; return; } const listeners = this._listeners; const index = listeners.indexOf(listener); if (index === -1) { console.log("disposed?", this._disposed); console.log("size?", this._size); console.log("arr?", JSON.stringify(this._listeners)); throw new Error("Attempted to dispose unknown listener"); } this._size--; listeners[index] = void 0; const adjustDeliveryQueue = this._deliveryQueue.current === this; if (this._size * compactionThreshold <= listeners.length) { let n = 0; for (let i = 0; i < listeners.length; i++) { if (listeners[i]) { listeners[n++] = listeners[i]; } else if (adjustDeliveryQueue && n < this._deliveryQueue.end) { this._deliveryQueue.end--; if (n < this._deliveryQueue.i) { this._deliveryQueue.i--; } } } listeners.length = n; } } _deliver(listener, value) { if (!listener) { return; } const errorHandler2 = this._options?.onListenerError || onUnexpectedError; if (!errorHandler2) { listener.value(value); return; } try { listener.value(value); } catch (e) { errorHandler2(e); } } /** Delivers items in the queue. Assumes the queue is ready to go. */ _deliverQueue(dq) { const listeners = dq.current._listeners; while (dq.i < dq.end) { this._deliver(listeners[dq.i++], dq.value); } dq.reset(); } /** * To be kept private to fire an event to * subscribers */ fire(event) { if (this._deliveryQueue?.current) { this._deliverQueue(this._deliveryQueue); this._perfMon?.stop(); } this._perfMon?.start(this._size); if (!this._listeners) ; else if (this._listeners instanceof UniqueContainer) { this._deliver(this._listeners, event); } else { const dq = this._deliveryQueue; dq.enqueue(this, event, this._listeners.length); this._deliverQueue(dq); } this._perfMon?.stop(); } hasListeners() { return this._size > 0; } } class EventDeliveryQueuePrivate { constructor() { this.i = -1; this.end = 0; } enqueue(emitter, value, end) { this.i = 0; this.end = end; this.current = emitter; this.value = value; } reset() { this.i = this.end; this.current = void 0; this.value = void 0; } } function getNLSMessages() { return globalThis._VSCODE_NLS_MESSAGES; } function getNLSLanguage() { return globalThis._VSCODE_NLS_LANGUAGE; } const isPseudo = getNLSLanguage() === "pseudo" || typeof document !== "undefined" && document.location && typeof document.location.hash === "string" && document.location.hash.indexOf("pseudo=true") >= 0; function _format$1(message, args) { let result; if (args.length === 0) { result = message; } else { result = message.replace(/\{(\d+)\}/g, (match, rest) => { const index = rest[0]; const arg = args[index]; let result2 = match; if (typeof arg === "string") { result2 = arg; } else if (typeof arg === "number" || typeof arg === "boolean" || arg === void 0 || arg === null) { result2 = String(arg); } return result2; }); } if (isPseudo) { result = "[" + result.replace(/[aouei]/g, "$&$&") + "]"; } return result; } function localize(data, message, ...args) { if (typeof data === "number") { return _format$1(lookupMessage(data, message), args); } return _format$1(message, args); } function lookupMessage(index, fallback) { const message = getNLSMessages()?.[index]; if (typeof message !== "string") { if (typeof fallback === "string") { return fallback; } throw new Error(`!!! NLS MISSING: ${index} !!!`); } return message; } const LANGUAGE_DEFAULT = "en"; let _isWindows = false; let _isMacintosh = false; let _isLinux = false; let _locale = void 0; let _language = LANGUAGE_DEFAULT; let _platformLocale = LANGUAGE_DEFAULT; let _translationsConfigFile = void 0; let _userAgent = void 0; const $globalThis = globalThis; let nodeProcess = void 0; if (typeof $globalThis.vscode !== "undefined" && typeof $globalThis.vscode.process !== "undefined") { nodeProcess = $globalThis.vscode.process; } else if (typeof process !== "undefined" && typeof process?.versions?.node === "string") { nodeProcess = process; } const isElectronProcess = typeof nodeProcess?.versions?.electron === "string"; const isElectronRenderer = isElectronProcess && nodeProcess?.type === "renderer"; if (typeof nodeProcess === "object") { _isWindows = nodeProcess.platform === "win32"; _isMacintosh = nodeProcess.platform === "darwin"; _isLinux = nodeProcess.platform === "linux"; _isLinux && !!nodeProcess.env["SNAP"] && !!nodeProcess.env["SNAP_REVISION"]; !!nodeProcess.env["CI"] || !!nodeProcess.env["BUILD_ARTIFACTSTAGINGDIRECTORY"] || !!nodeProcess.env["GITHUB_WORKSPACE"]; _locale = LANGUAGE_DEFAULT; _language = LANGUAGE_DEFAULT; const rawNlsConfig = nodeProcess.env["VSCODE_NLS_CONFIG"]; if (rawNlsConfig) { try { const nlsConfig = JSON.parse(rawNlsConfig); _locale = nlsConfig.userLocale; _platformLocale = nlsConfig.osLocale; _language = nlsConfig.resolvedLanguage || LANGUAGE_DEFAULT; _translationsConfigFile = nlsConfig.languagePack?.translationsConfigFile; } catch (e) { } } } else if (typeof navigator === "object" && !isElectronRenderer) { _userAgent = navigator.userAgent; _isWindows = _userAgent.indexOf("Windows") >= 0; _isMacintosh = _userAgent.indexOf("Macintosh") >= 0; (_userAgent.indexOf("Macintosh") >= 0 || _userAgent.indexOf("iPad") >= 0 || _userAgent.indexOf("iPhone") >= 0) && !!navigator.maxTouchPoints && navigator.maxTouchPoints > 0; _isLinux = _userAgent.indexOf("Linux") >= 0; _userAgent?.indexOf("Mobi") >= 0; _language = getNLSLanguage() || LANGUAGE_DEFAULT; _locale = navigator.language.toLowerCase(); _platformLocale = _locale; } else { console.error("Unable to resolve platform."); } const isWindows = _isWindows; const isMacintosh = _isMacintosh; const userAgent = _userAgent; const setTimeout0IsFaster = typeof $globalThis.postMessage === "function" && !$globalThis.importScripts; (() => { if (setTimeout0IsFaster) { const pending = []; $globalThis.addEventListener("message", (e) => { if (e.data && e.data.vscodeScheduleAsyncWork) { for (let i = 0, len = pending.length; i < len; i++) { const candidate = pending[i]; if (candidate.id === e.data.vscodeScheduleAsyncWork) { pending.splice(i, 1); candidate.callback(); return; } } } }); let lastId = 0; return (callback) => { const myId = ++lastId; pending.push({ id: myId, callback }); $globalThis.postMessage({ vscodeScheduleAsyncWork: myId }, "*"); }; } return (callback) => setTimeout(callback); })(); const isChrome = !!(userAgent && userAgent.indexOf("Chrome") >= 0); !!(userAgent && userAgent.indexOf("Firefox") >= 0); !!(!isChrome && (userAgent && userAgent.indexOf("Safari") >= 0)); !!(userAgent && userAgent.indexOf("Edg/") >= 0); !!(userAgent && userAgent.indexOf("Android") >= 0); function identity(t2) { return t2; } class LRUCachedFunction { constructor(arg1, arg2) { this.lastCache = void 0; this.lastArgKey = void 0; if (typeof arg1 === "function") { this._fn = arg1; this._computeKey = identity; } else { this._fn = arg2; this._computeKey = arg1.getCacheKey; } } get(arg) { const key = this._computeKey(arg); if (this.lastArgKey !== key) { this.lastArgKey = key; this.lastCache = this._fn(arg); } return this.lastCache; } } var LazyValueState; (function(LazyValueState2) { LazyValueState2[LazyValueState2["Uninitialized"] = 0] = "Uninitialized"; LazyValueState2[LazyValueState2["Running"] = 1] = "Running"; LazyValueState2[LazyValueState2["Completed"] = 2] = "Completed"; })(LazyValueState || (LazyValueState = {})); class Lazy { constructor(executor) { this.executor = executor; this._state = LazyValueState.Uninitialized; } /** * Get the wrapped value. * * This will force evaluation of the lazy value if it has not been resolved yet. Lazy values are only * resolved once. `getValue` will re-throw exceptions that are hit while resolving the value */ get value() { if (this._state === LazyValueState.Uninitialized) { this._state = LazyValueState.Running; try { this._value = this.executor(); } catch (err) { this._error = err; } finally { this._state = LazyValueState.Completed; } } else if (this._state === LazyValueState.Running) { throw new Error("Cannot read the value of a lazy that is being initialized"); } if (this._error) { throw this._error; } return this._value; } /** * Get the wrapped value without forcing evaluation. */ get rawValue() { return this._value; } } function escapeRegExpCharacters(value) { return value.replace(/[\\\{\}\*\+\?\|\^\$\.\[\]\(\)]/g, "\\$&"); } function regExpLeadsToEndlessLoop(regexp) { if (regexp.source === "^" || regexp.source === "^$" || regexp.source === "$" || regexp.source === "^\\s*$") { return false; } const match = regexp.exec(""); return !!(match && regexp.lastIndex === 0); } function splitLines(str) { return str.split(/\r\n|\r|\n/); } function firstNonWhitespaceIndex(str) { for (let i = 0, len = str.length; i < len; i++) { const chCode = str.charCodeAt(i); if (chCode !== 32 && chCode !== 9) { return i; } } return -1; } function lastNonWhitespaceIndex(str, startIndex = str.length - 1) { for (let i = startIndex; i >= 0; i--) { const chCode = str.charCodeAt(i); if (chCode !== 32 && chCode !== 9) { return i; } } return -1; } function isUpperAsciiLetter(code) { return code >= 65 && code <= 90; } function commonPrefixLength(a, b) { const len = Math.min(a.length, b.length); let i; for (i = 0; i < len; i++) { if (a.charCodeAt(i) !== b.charCodeAt(i)) { return i; } } return len; } function commonSuffixLength(a, b) { const len = Math.min(a.length, b.length); let i; const aLastIndex = a.length - 1; const bLastIndex = b.length - 1; for (i = 0; i < len; i++) { if (a.charCodeAt(aLastIndex - i) !== b.charCodeAt(bLastIndex - i)) { return i; } } return len; } function isHighSurrogate(charCode) { return 55296 <= charCode && charCode <= 56319; } function isLowSurrogate(charCode) { return 56320 <= charCode && charCode <= 57343; } function computeCodePoint(highSurrogate, lowSurrogate) { return (highSurrogate - 55296 << 10) + (lowSurrogate - 56320) + 65536; } function getNextCodePoint(str, len, offset) { const charCode = str.charCodeAt(offset); if (isHighSurrogate(charCode) && offset + 1 < len) { const nextCharCode = str.charCodeAt(offset + 1); if (isLowSurrogate(nextCharCode)) { return computeCodePoint(charCode, nextCharCode); } } return charCode; } const IS_BASIC_ASCII = /^[\t\n\r\x20-\x7E]*$/; function isBasicASCII(str) { return IS_BASIC_ASCII.test(str); } const _AmbiguousCharacters = class _AmbiguousCharacters { static getInstance(locales) { return _AmbiguousCharacters.cache.get(Array.from(locales)); } static getLocales() { return _AmbiguousCharacters._locales.value; } constructor(confusableDictionary) { this.confusableDictionary = confusableDictionary; } isAmbiguous(codePoint) { return this.confusableDictionary.has(codePoint); } /** * Returns the non basic ASCII code point that the given code point can be confused, * or undefined if such code point does note exist. */ getPrimaryConfusable(codePoint) { return this.confusableDictionary.get(codePoint); } getConfusableCodePoints() { return new Set(this.confusableDictionary.keys()); } }; _AmbiguousCharacters.ambiguousCharacterData = new Lazy(() => { return JSON.parse('{"_common":[8232,32,8233,32,5760,32,8192,32,8193,32,8194,32,8195,32,8196,32,8197,32,8198,32,8200,32,8201,32,8202,32,8287,32,8199,32,8239,32,2042,95,65101,95,65102,95,65103,95,8208,45,8209,45,8210,45,65112,45,1748,45,8259,45,727,45,8722,45,10134,45,11450,45,1549,44,1643,44,184,44,42233,44,894,59,2307,58,2691,58,1417,58,1795,58,1796,58,5868,58,65072,58,6147,58,6153,58,8282,58,1475,58,760,58,42889,58,8758,58,720,58,42237,58,451,33,11601,33,660,63,577,63,2429,63,5038,63,42731,63,119149,46,8228,46,1793,46,1794,46,42510,46,68176,46,1632,46,1776,46,42232,46,1373,96,65287,96,8219,96,1523,96,8242,96,1370,96,8175,96,65344,96,900,96,8189,96,8125,96,8127,96,8190,96,697,96,884,96,712,96,714,96,715,96,756,96,699,96,701,96,700,96,702,96,42892,96,1497,96,2036,96,2037,96,5194,96,5836,96,94033,96,94034,96,65339,91,10088,40,10098,40,12308,40,64830,40,65341,93,10089,41,10099,41,12309,41,64831,41,10100,123,119060,123,10101,125,65342,94,8270,42,1645,42,8727,42,66335,42,5941,47,8257,47,8725,47,8260,47,9585,47,10187,47,10744,47,119354,47,12755,47,12339,47,11462,47,20031,47,12035,47,65340,92,65128,92,8726,92,10189,92,10741,92,10745,92,119311,92,119355,92,12756,92,20022,92,12034,92,42872,38,708,94,710,94,5869,43,10133,43,66203,43,8249,60,10094,60,706,60,119350,60,5176,60,5810,60,5120,61,11840,61,12448,61,42239,61,8250,62,10095,62,707,62,119351,62,5171,62,94015,62,8275,126,732,126,8128,126,8764,126,65372,124,65293,45,118002,50,120784,50,120794,50,120804,50,120814,50,120824,50,130034,50,42842,50,423,50,1000,50,42564,50,5311,50,42735,50,119302,51,118003,51,120785,51,120795,51,120805,51,120815,51,120825,51,130035,51,42923,51,540,51,439,51,42858,51,11468,51,1248,51,94011,51,71882,51,118004,52,120786,52,120796,52,120806,52,120816,52,120826,52,130036,52,5070,52,71855,52,118005,53,120787,53,120797,53,120807,53,120817,53,120827,53,130037,53,444,53,71867,53,118006,54,120788,54,120798,54,120808,54,120818,54,120828,54,130038,54,11474,54,5102,54,71893,54,119314,55,118007,55,120789,55,120799,55,120809,55,120819,55,120829,55,130039,55,66770,55,71878,55,2819,56,2538,56,2666,56,125131,56,118008,56,120790,56,120800,56,120810,56,120820,56,120830,56,130040,56,547,56,546,56,66330,56,2663,57,2920,57,2541,57,3437,57,118009,57,120791,57,120801,57,120811,57,120821,57,120831,57,130041,57,42862,57,11466,57,71884,57,71852,57,71894,57,9082,97,65345,97,119834,97,119886,97,119938,97,119990,97,120042,97,120094,97,120146,97,120198,97,120250,97,120302,97,120354,97,120406,97,120458,97,593,97,945,97,120514,97,120572,97,120630,97,120688,97,120746,97,65313,65,117974,65,119808,65,119860,65,119912,65,119964,65,120016,65,120068,65,120120,65,120172,65,120224,65,120276,65,120328,65,120380,65,120432,65,913,65,120488,65,120546,65,120604,65,120662,65,120720,65,5034,65,5573,65,42222,65,94016,65,66208,65,119835,98,119887,98,119939,98,119991,98,120043,98,120095,98,120147,98,120199,98,120251,98,120303,98,120355,98,120407,98,120459,98,388,98,5071,98,5234,98,5551,98,65314,66,8492,66,117975,66,119809,66,119861,66,119913,66,120017,66,120069,66,120121,66,120173,66,120225,66,120277,66,120329,6