UNPKG

monaco-editor-core

Version:
80 lines 3.64 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { Permutation, compareBy } from '../../../../base/common/arrays.js'; import { observableValue, autorun, transaction } from '../../../../base/common/observable.js'; import { bindContextKey } from '../../../../platform/observable/common/platformObservableUtils.js'; import { Range } from '../../../common/core/range.js'; import { TextEdit } from '../../../common/core/edits/textEdit.js'; import { getPositionOffsetTransformerFromTextModel } from '../../../common/core/text/getPositionOffsetTransformerFromTextModel.js'; const array = []; export function getReadonlyEmptyArray() { return array; } export function getEndPositionsAfterApplying(edits) { const newRanges = getModifiedRangesAfterApplying(edits); return newRanges.map(range => range.getEndPosition()); } export function getModifiedRangesAfterApplying(edits) { const sortPerm = Permutation.createSortPermutation(edits, compareBy(e => e.range, Range.compareRangesUsingStarts)); const edit = new TextEdit(sortPerm.apply(edits)); const sortedNewRanges = edit.getNewRanges(); return sortPerm.inverse().apply(sortedNewRanges); } export function removeTextReplacementCommonSuffixPrefix(edits, textModel) { const transformer = getPositionOffsetTransformerFromTextModel(textModel); const text = textModel.getValue(); const stringReplacements = edits.map(edit => transformer.getStringReplacement(edit)); const minimalStringReplacements = stringReplacements.map(replacement => replacement.removeCommonSuffixPrefix(text)); return minimalStringReplacements.map(replacement => transformer.getTextReplacement(replacement)); } export function convertItemsToStableObservables(items, store) { const result = observableValue('result', []); const innerObservables = []; store.add(autorun(reader => { const itemsValue = items.read(reader); transaction(tx => { if (itemsValue.length !== innerObservables.length) { innerObservables.length = itemsValue.length; for (let i = 0; i < innerObservables.length; i++) { if (!innerObservables[i]) { innerObservables[i] = observableValue('item', itemsValue[i]); } } result.set([...innerObservables], tx); } innerObservables.forEach((o, i) => o.set(itemsValue[i], tx)); }); })); return result; } export class ObservableContextKeyService { constructor(_contextKeyService) { this._contextKeyService = _contextKeyService; } bind(key, obs) { return bindContextKey(key, this._contextKeyService, obs instanceof Function ? obs : reader => obs.read(reader)); } } export function wait(ms, cancellationToken) { return new Promise(resolve => { let d = undefined; const handle = setTimeout(() => { if (d) { d.dispose(); } resolve(); }, ms); if (cancellationToken) { d = cancellationToken.onCancellationRequested(() => { clearTimeout(handle); if (d) { d.dispose(); } resolve(); }); } }); } //# sourceMappingURL=utils.js.map