monaco-editor11 1.1.0 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +1 -8
- package/dist/monaco-editor11.es.js +1 -49
- package/dist/monaco-editor11.umd.js +1 -1
- package/dist/workers/_.contribution.js +120 -0
- package/dist/workers/abap.contribution.js +8 -0
- package/dist/workers/abap.js +1397 -0
- package/dist/workers/abstractCodeEditorService.js +129 -0
- package/dist/workers/abstractKeybindingService.js +286 -0
- package/dist/workers/abstractScrollbar.js +214 -0
- package/dist/workers/abstractSyntaxTokenBackend.js +128 -0
- package/dist/workers/abstractText.js +89 -0
- package/dist/workers/abstractTree.js +2027 -0
- package/dist/workers/accessibility.js +11 -0
- package/dist/workers/accessibilityService.js +111 -0
- package/dist/workers/accessibilitySignalService.js +331 -0
- package/dist/workers/accessibleDiffViewer.js +588 -0
- package/dist/workers/accessibleViewRegistry.js +25 -0
- package/dist/workers/action.js +15 -0
- package/dist/workers/actionCommonCategories.js +16 -0
- package/dist/workers/actionList.js +344 -0
- package/dist/workers/actionViewItemService.js +29 -0
- package/dist/workers/actionViewItems.js +376 -0
- package/dist/workers/actionWidget.js +236 -0
- package/dist/workers/actionbar.js +462 -0
- package/dist/workers/actions.js +483 -0
- package/dist/workers/anchorSelect.js +160 -0
- package/dist/workers/animation.js +74 -0
- package/dist/workers/apex.contribution.js +9 -0
- package/dist/workers/apex.js +329 -0
- package/dist/workers/aria.js +84 -0
- package/dist/workers/arrays.js +529 -0
- package/dist/workers/arraysFind.js +177 -0
- package/dist/workers/assert.js +79 -0
- package/dist/workers/ast.js +485 -0
- package/dist/workers/async.js +938 -0
- package/dist/workers/asyncDataTree.js +946 -0
- package/dist/workers/autoIndent.js +390 -0
- package/dist/workers/autorun.js +89 -0
- package/dist/workers/autorunImpl.js +215 -0
- package/dist/workers/azcli.contribution.js +8 -0
- package/dist/workers/azcli.js +67 -0
- package/dist/workers/bannerController.js +118 -0
- package/dist/workers/base.js +19 -0
- package/dist/workers/baseColors.js +31 -0
- package/dist/workers/baseObservable.js +106 -0
- package/dist/workers/baseRenderStrategy.js +19 -0
- package/dist/workers/baseResolvedKeybinding.js +56 -0
- package/dist/workers/bat.contribution.js +8 -0
- package/dist/workers/bat.js +99 -0
- package/dist/workers/beforeEditPositionMapper.js +110 -0
- package/dist/workers/bicep.contribution.js +8 -0
- package/dist/workers/bicep.js +108 -0
- package/dist/workers/blockCommentCommand.js +149 -0
- package/dist/workers/blockDecorations.js +97 -0
- package/dist/workers/bracketMatching.js +359 -0
- package/dist/workers/bracketPairsImpl.js +717 -0
- package/dist/workers/bracketPairsTree.js +343 -0
- package/dist/workers/bracketSelections.js +149 -0
- package/dist/workers/brackets.js +108 -0
- package/dist/workers/browser.js +57 -0
- package/dist/workers/buffer.js +81 -0
- package/dist/workers/bufferDirtyTracker.js +45 -0
- package/dist/workers/bulkEditService.js +76 -0
- package/dist/workers/button.js +226 -0
- package/dist/workers/cache.js +61 -0
- package/dist/workers/cameligo.contribution.js +8 -0
- package/dist/workers/cameligo.js +173 -0
- package/dist/workers/canIUse.js +23 -0
- package/dist/workers/cancellation.js +116 -0
- package/dist/workers/caretOperations.js +48 -0
- package/dist/workers/changeRecorder.js +78 -0
- package/dist/workers/changeTracker.js +80 -0
- package/dist/workers/charWidthReader.js +104 -0
- package/dist/workers/characterClassifier.js +59 -0
- package/dist/workers/characterPair.js +40 -0
- package/dist/workers/chartsColors.js +18 -0
- package/dist/workers/clickLinkGesture.js +161 -0
- package/dist/workers/clipboard.js +308 -0
- package/dist/workers/clipboardService.js +9 -0
- package/dist/workers/clipboardUtils.js +85 -0
- package/dist/workers/clojure.contribution.js +8 -0
- package/dist/workers/clojure.js +760 -0
- package/dist/workers/codeAction.js +306 -0
- package/dist/workers/codeActionCommands.js +230 -0
- package/dist/workers/codeActionContributions.js +55 -0
- package/dist/workers/codeActionController.js +372 -0
- package/dist/workers/codeActionKeybindingResolver.js +90 -0
- package/dist/workers/codeActionMenu.js +68 -0
- package/dist/workers/codeActionModel.js +334 -0
- package/dist/workers/codeEditorContributions.js +132 -0
- package/dist/workers/codeEditorService.js +9 -0
- package/dist/workers/codeEditorWidget.js +1856 -0
- package/dist/workers/codeLensCache.js +112 -0
- package/dist/workers/codelens.js +114 -0
- package/dist/workers/codelensController.js +469 -0
- package/dist/workers/codelensWidget.js +265 -0
- package/dist/workers/codicons.js +50 -0
- package/dist/workers/codiconsLibrary.js +642 -0
- package/dist/workers/codiconsUtil.js +22 -0
- package/dist/workers/coffee.contribution.js +9 -0
- package/dist/workers/coffee.js +231 -0
- package/dist/workers/collections.js +98 -0
- package/dist/workers/color.js +94 -0
- package/dist/workers/colorDetector.js +245 -0
- package/dist/workers/colorPickerBody.js +71 -0
- package/dist/workers/colorPickerCloseButton.js +34 -0
- package/dist/workers/colorPickerContribution.js +50 -0
- package/dist/workers/colorPickerHeader.js +79 -0
- package/dist/workers/colorPickerInsertButton.js +27 -0
- package/dist/workers/colorPickerModel.js +74 -0
- package/dist/workers/colorPickerParticipantUtils.js +52 -0
- package/dist/workers/colorPickerSaturationBox.js +106 -0
- package/dist/workers/colorPickerStrip.js +98 -0
- package/dist/workers/colorPickerWidget.js +32 -0
- package/dist/workers/colorUtils.js +199 -0
- package/dist/workers/colorizedBracketPairsDecorationProvider.js +97 -0
- package/dist/workers/colorizer.js +120 -0
- package/dist/workers/colors.js +20 -0
- package/dist/workers/columnRange.js +35 -0
- package/dist/workers/combineTextEditInfos.js +124 -0
- package/dist/workers/commandIds.js +12 -0
- package/dist/workers/commands.js +329 -0
- package/dist/workers/commandsQuickAccess.js +40 -0
- package/dist/workers/comment.js +147 -0
- package/dist/workers/common.js +20 -0
- package/dist/workers/comparers.js +87 -0
- package/dist/workers/completionModel.js +227 -0
- package/dist/workers/compressedObjectTreeModel.js +385 -0
- package/dist/workers/computeGhostText.js +182 -0
- package/dist/workers/computeMovedLines.js +249 -0
- package/dist/workers/concat23Trees.js +192 -0
- package/dist/workers/configuration.js +92 -0
- package/dist/workers/configurationModels.js +614 -0
- package/dist/workers/configurationRegistry.js +400 -0
- package/dist/workers/configurations.js +46 -0
- package/dist/workers/consoleObservableLogger.js +83 -0
- package/dist/workers/constObservable.js +35 -0
- package/dist/workers/contentHoverComputer.js +71 -0
- package/dist/workers/contentHoverController.js +320 -0
- package/dist/workers/contentHoverRendered.js +336 -0
- package/dist/workers/contentHoverStatusBar.js +52 -0
- package/dist/workers/contentHoverTypes.js +29 -0
- package/dist/workers/contentHoverWidget.js +394 -0
- package/dist/workers/contentHoverWidgetWrapper.js +362 -0
- package/dist/workers/contentSegmenter.js +52 -0
- package/dist/workers/contentWidgets.js +495 -0
- package/dist/workers/contextKeyService.js +468 -0
- package/dist/workers/contextMenuHandler.js +126 -0
- package/dist/workers/contextMenuService.js +103 -0
- package/dist/workers/contextScopedHistoryWidget.js +106 -0
- package/dist/workers/contextViewService.js +73 -0
- package/dist/workers/contextkey.js +1551 -0
- package/dist/workers/contextkeys.js +21 -0
- package/dist/workers/contextmenu.js +334 -0
- package/dist/workers/contextview.js +298 -0
- package/dist/workers/contiguousMultilineTokens.js +32 -0
- package/dist/workers/contiguousMultilineTokensBuilder.js +23 -0
- package/dist/workers/contiguousTokensEditing.js +128 -0
- package/dist/workers/contiguousTokensStore.js +207 -0
- package/dist/workers/contribution.js +36 -0
- package/dist/workers/coordinatesConverter.js +51 -0
- package/dist/workers/copyLinesCommand.js +73 -0
- package/dist/workers/copyPasteContribution.js +114 -0
- package/dist/workers/copyPasteController.js +585 -0
- package/dist/workers/copySelection.js +47 -0
- package/dist/workers/coreCommands.js +1731 -0
- package/dist/workers/countBadge.js +52 -0
- package/dist/workers/cpp.contribution.js +14 -0
- package/dist/workers/cpp.js +388 -0
- package/dist/workers/csharp.contribution.js +8 -0
- package/dist/workers/csharp.js +325 -0
- package/dist/workers/csp.contribution.js +8 -0
- package/dist/workers/csp.js +52 -0
- package/dist/workers/css.contribution.js +9 -0
- package/dist/workers/css.js +184 -0
- package/dist/workers/cssMode.js +198 -0
- package/dist/workers/cssValue.js +69 -0
- package/dist/workers/cssWorker.js +183 -0
- package/dist/workers/currentLineHighlight.js +205 -0
- package/dist/workers/cursor.js +899 -0
- package/dist/workers/cursorAtomicMoveOperations.js +145 -0
- package/dist/workers/cursorCollection.js +194 -0
- package/dist/workers/cursorColumnSelection.js +93 -0
- package/dist/workers/cursorColumns.js +112 -0
- package/dist/workers/cursorCommon.js +250 -0
- package/dist/workers/cursorContext.js +15 -0
- package/dist/workers/cursorDeleteOperations.js +231 -0
- package/dist/workers/cursorMoveCommands.js +676 -0
- package/dist/workers/cursorMoveOperations.js +290 -0
- package/dist/workers/cursorTypeEditOperations.js +968 -0
- package/dist/workers/cursorTypeOperations.js +173 -0
- package/dist/workers/cursorUndo.js +133 -0
- package/dist/workers/cursorUtils.js +75 -0
- package/dist/workers/cursorWordOperations.js +720 -0
- package/dist/workers/cypher.contribution.js +8 -0
- package/dist/workers/cypher.js +262 -0
- package/dist/workers/dart.contribution.js +9 -0
- package/dist/workers/dart.js +280 -0
- package/dist/workers/dataChannel.js +12 -0
- package/dist/workers/dataTransfer.js +80 -0
- package/dist/workers/dataTree.js +20 -0
- package/dist/workers/date.js +57 -0
- package/dist/workers/debugLocation.js +66 -0
- package/dist/workers/debugName.js +110 -0
- package/dist/workers/debuggerRpc.js +67 -0
- package/dist/workers/decorationCssRuleExtractor.js +73 -0
- package/dist/workers/decorationStyleCache.js +40 -0
- package/dist/workers/decorations.js +196 -0
- package/dist/workers/decorationsOverviewRuler.js +416 -0
- package/dist/workers/decorators.js +33 -0
- package/dist/workers/defaultDocumentColorProvider.js +55 -0
- package/dist/workers/defaultDocumentColorsComputer.js +138 -0
- package/dist/workers/defaultLinesDiffComputer.js +188 -0
- package/dist/workers/defaultProviders.js +230 -0
- package/dist/workers/defaultStyles.js +194 -0
- package/dist/workers/delegatingEditorImpl.js +111 -0
- package/dist/workers/derived.js +80 -0
- package/dist/workers/derivedImpl.js +353 -0
- package/dist/workers/descriptors.js +13 -0
- package/dist/workers/devToolsLogger.js +442 -0
- package/dist/workers/dialogs.js +5 -0
- package/dist/workers/diff.js +902 -0
- package/dist/workers/diffAlgorithm.js +139 -0
- package/dist/workers/diffChange.js +34 -0
- package/dist/workers/diffEditor.contribution.js +83 -0
- package/dist/workers/diffEditor.js +38 -0
- package/dist/workers/diffEditorDecorations.js +115 -0
- package/dist/workers/diffEditorEditors.js +190 -0
- package/dist/workers/diffEditorItemTemplate.js +272 -0
- package/dist/workers/diffEditorOptions.js +152 -0
- package/dist/workers/diffEditorSash.js +86 -0
- package/dist/workers/diffEditorViewModel.js +608 -0
- package/dist/workers/diffEditorViewZones.js +525 -0
- package/dist/workers/diffEditorWidget.js +590 -0
- package/dist/workers/diffProviderFactoryService.js +142 -0
- package/dist/workers/dnd.js +198 -0
- package/dist/workers/dockerfile.contribution.js +9 -0
- package/dist/workers/dockerfile.js +129 -0
- package/dist/workers/documentSemanticTokens.js +362 -0
- package/dist/workers/documentSymbols.js +24 -0
- package/dist/workers/dom.js +1454 -0
- package/dist/workers/domFontInfo.js +28 -0
- package/dist/workers/domLineBreaksComputer.js +301 -0
- package/dist/workers/domReadingContext.js +43 -0
- package/dist/workers/domSanitize.js +312 -0
- package/dist/workers/domStylesheets.js +145 -0
- package/dist/workers/dompurify.js +1347 -0
- package/dist/workers/dragAndDropCommand.js +65 -0
- package/dist/workers/dragScrolling.js +174 -0
- package/dist/workers/dropIntoEditorContribution.js +41 -0
- package/dist/workers/dropIntoEditorController.js +173 -0
- package/dist/workers/dropdown.js +141 -0
- package/dist/workers/dropdownActionViewItem.js +109 -0
- package/dist/workers/dynamicProgrammingDiffing.js +101 -0
- package/dist/workers/dynamicViewOverlay.js +10 -0
- package/dist/workers/ecl.contribution.js +8 -0
- package/dist/workers/ecl.js +455 -0
- package/dist/workers/edcore.main.js +74 -0
- package/dist/workers/edit.js +83 -0
- package/dist/workers/editContext.js +10 -0
- package/dist/workers/editContextFactory.js +16 -0
- package/dist/workers/editOperation.js +36 -0
- package/dist/workers/editStack.js +363 -0
- package/dist/workers/editor.all.js +65 -0
- package/dist/workers/editor.api.js +2 -0
- package/dist/workers/editor.api2.js +60 -0
- package/dist/workers/editor.js +15 -0
- package/dist/workers/editor.main.js +170 -0
- package/dist/workers/editor.worker.start.js +44 -0
- package/dist/workers/editorAction.js +26 -0
- package/dist/workers/editorBaseApi.js +43 -0
- package/dist/workers/editorBrowser.js +53 -0
- package/dist/workers/editorColorRegistry.js +102 -0
- package/dist/workers/editorColors.js +128 -0
- package/dist/workers/editorCommon.js +13 -0
- package/dist/workers/editorConfiguration.js +292 -0
- package/dist/workers/editorConfigurationSchema.js +338 -0
- package/dist/workers/editorContextKeys.js +84 -0
- package/dist/workers/editorDom.js +299 -0
- package/dist/workers/editorExtensions.js +489 -0
- package/dist/workers/editorFeatures.js +17 -0
- package/dist/workers/editorGutter.js +117 -0
- package/dist/workers/editorMarkdownCodeBlockRenderer.js +85 -0
- package/dist/workers/editorNavigationQuickAccess.js +152 -0
- package/dist/workers/editorOptions.js +3440 -0
- package/dist/workers/editorScrollbar.js +151 -0
- package/dist/workers/editorState.js +115 -0
- package/dist/workers/editorTheme.js +23 -0
- package/dist/workers/editorWebWorker.js +299 -0
- package/dist/workers/editorWorker.js +9 -0
- package/dist/workers/editorWorkerHost.js +15 -0
- package/dist/workers/editorWorkerService.js +366 -0
- package/dist/workers/editorZoom.js +26 -0
- package/dist/workers/electricCharacter.js +55 -0
- package/dist/workers/elementSizeObserver.js +107 -0
- package/dist/workers/elixir.contribution.js +8 -0
- package/dist/workers/elixir.js +568 -0
- package/dist/workers/embeddedCodeEditorWidget.js +66 -0
- package/dist/workers/encodedTokenAttributes.js +79 -0
- package/dist/workers/enterAction.js +53 -0
- package/dist/workers/environment.js +5 -0
- package/dist/workers/eolCounter.js +44 -0
- package/dist/workers/equals.js +84 -0
- package/dist/workers/errorMessage.js +71 -0
- package/dist/workers/errors.js +163 -0
- package/dist/workers/event.js +1197 -0
- package/dist/workers/extensions.js +18 -0
- package/dist/workers/extpath.js +147 -0
- package/dist/workers/fastDomNode.js +255 -0
- package/dist/workers/files.js +19 -0
- package/dist/workers/filters.js +742 -0
- package/dist/workers/findController.js +970 -0
- package/dist/workers/findDecorations.js +311 -0
- package/dist/workers/findInput.js +294 -0
- package/dist/workers/findInputToggles.js +52 -0
- package/dist/workers/findModel.js +497 -0
- package/dist/workers/findOptionsWidget.js +155 -0
- package/dist/workers/findSectionHeaders.js +128 -0
- package/dist/workers/findState.js +244 -0
- package/dist/workers/findWidget.js +1168 -0
- package/dist/workers/findWidgetSearchHistory.js +85 -0
- package/dist/workers/fixBrackets.js +67 -0
- package/dist/workers/fixedArray.js +70 -0
- package/dist/workers/floatingMenu.contribution.js +9 -0
- package/dist/workers/floatingMenu.js +94 -0
- package/dist/workers/flow9.contribution.js +8 -0
- package/dist/workers/flow9.js +141 -0
- package/dist/workers/folding.js +1136 -0
- package/dist/workers/foldingDecorations.js +158 -0
- package/dist/workers/foldingModel.js +532 -0
- package/dist/workers/foldingRanges.js +354 -0
- package/dist/workers/fontInfo.js +172 -0
- package/dist/workers/fontInfoFromSettings.js +29 -0
- package/dist/workers/fontMeasurements.js +206 -0
- package/dist/workers/fontZoom.js +47 -0
- package/dist/workers/fonts.js +17 -0
- package/dist/workers/format.js +367 -0
- package/dist/workers/formatActions.js +263 -0
- package/dist/workers/formattedTextRenderer.js +160 -0
- package/dist/workers/formattingEdit.js +57 -0
- package/dist/workers/forwardingTelemetryService.js +60 -0
- package/dist/workers/freemarker2.contribution.js +52 -0
- package/dist/workers/freemarker2.js +1062 -0
- package/dist/workers/fsharp.contribution.js +8 -0
- package/dist/workers/fsharp.js +216 -0
- package/dist/workers/fullFileRenderStrategy.js +414 -0
- package/dist/workers/fullFileRenderStrategy.wgsl.js +93 -0
- package/dist/workers/functional.js +24 -0
- package/dist/workers/fuzzyScorer.js +143 -0
- package/dist/workers/getHover.js +56 -0
- package/dist/workers/getIconClasses.js +106 -0
- package/dist/workers/getLinks.js +157 -0
- package/dist/workers/getPositionOffsetTransformerFromTextModel.js +24 -0
- package/dist/workers/getSemanticTokens.js +211 -0
- package/dist/workers/ghostText.js +111 -0
- package/dist/workers/ghostTextView.js +449 -0
- package/dist/workers/glob.js +581 -0
- package/dist/workers/globalPointerMoveMonitor.js +83 -0
- package/dist/workers/glyphHoverComputer.js +40 -0
- package/dist/workers/glyphHoverController.js +171 -0
- package/dist/workers/glyphHoverWidget.js +184 -0
- package/dist/workers/glyphLanesModel.js +61 -0
- package/dist/workers/glyphMargin.js +403 -0
- package/dist/workers/glyphRasterizer.js +276 -0
- package/dist/workers/go.contribution.js +8 -0
- package/dist/workers/go.js +217 -0
- package/dist/workers/goToCommands.js +694 -0
- package/dist/workers/goToDefinitionAtPosition.js +267 -0
- package/dist/workers/goToSymbol.js +128 -0
- package/dist/workers/gotoError.js +272 -0
- package/dist/workers/gotoErrorWidget.js +352 -0
- package/dist/workers/gotoLineQuickAccess.js +183 -0
- package/dist/workers/gotoSymbolQuickAccess.js +395 -0
- package/dist/workers/gpuActions.js +126 -0
- package/dist/workers/gpuDisposable.js +48 -0
- package/dist/workers/gpuMark.js +80 -0
- package/dist/workers/gpuUtils.js +58 -0
- package/dist/workers/graph.js +74 -0
- package/dist/workers/graphql.contribution.js +9 -0
- package/dist/workers/graphql.js +150 -0
- package/dist/workers/guidesTextModelPart.js +405 -0
- package/dist/workers/gutterFeature.js +238 -0
- package/dist/workers/gutterIndicatorMenu.js +252 -0
- package/dist/workers/gutterIndicatorView.js +456 -0
- package/dist/workers/handlebars.contribution.js +9 -0
- package/dist/workers/handlebars.js +485 -0
- package/dist/workers/hash.js +256 -0
- package/dist/workers/hcl.contribution.js +8 -0
- package/dist/workers/hcl.js +182 -0
- package/dist/workers/helpQuickAccess.js +77 -0
- package/dist/workers/heuristicSequenceOptimizations.js +374 -0
- package/dist/workers/hiddenRangeModel.js +126 -0
- package/dist/workers/hideUnchangedRegionsFeature.js +433 -0
- package/dist/workers/hierarchicalKind.js +26 -0
- package/dist/workers/highlightDecorations.js +111 -0
- package/dist/workers/highlightedLabel.js +129 -0
- package/dist/workers/history.js +85 -0
- package/dist/workers/historyWidgetKeybindingHint.js +9 -0
- package/dist/workers/horizontalScrollbar.js +91 -0
- package/dist/workers/hotReloadHelpers.js +17 -0
- package/dist/workers/hover.js +11 -0
- package/dist/workers/hoverAccessibleViews.js +8 -0
- package/dist/workers/hoverActionIds.js +23 -0
- package/dist/workers/hoverActions.js +424 -0
- package/dist/workers/hoverColorPicker.js +14 -0
- package/dist/workers/hoverColorPickerContribution.js +44 -0
- package/dist/workers/hoverColorPickerParticipant.js +151 -0
- package/dist/workers/hoverContribution.js +56 -0
- package/dist/workers/hoverCopyButton.js +54 -0
- package/dist/workers/hoverDelegate2.js +39 -0
- package/dist/workers/hoverDelegateFactory.js +34 -0
- package/dist/workers/hoverOperation.js +168 -0
- package/dist/workers/hoverParticipant.js +161 -0
- package/dist/workers/hoverService.js +542 -0
- package/dist/workers/hoverTypes.js +64 -0
- package/dist/workers/hoverUtils.js +18 -0
- package/dist/workers/hoverWidget.js +93 -0
- package/dist/workers/html.contribution.js +9 -0
- package/dist/workers/html.js +374 -0
- package/dist/workers/htmlContent.js +164 -0
- package/dist/workers/htmlMode.js +213 -0
- package/dist/workers/htmlWorker.js +126 -0
- package/dist/workers/iPadShowKeyboard.js +74 -0
- package/dist/workers/iconLabel.js +291 -0
- package/dist/workers/iconLabels.js +33 -0
- package/dist/workers/iconRegistry.js +183 -0
- package/dist/workers/iconsStyleSheet.js +75 -0
- package/dist/workers/idGenerator.js +16 -0
- package/dist/workers/iframe.js +87 -0
- package/dist/workers/ime.js +33 -0
- package/dist/workers/inPlaceReplace.js +151 -0
- package/dist/workers/inPlaceReplaceCommand.js +27 -0
- package/dist/workers/indentGuides.js +254 -0
- package/dist/workers/indentRangeProvider.js +166 -0
- package/dist/workers/indentRules.js +63 -0
- package/dist/workers/indentUtils.js +33 -0
- package/dist/workers/indentation.js +100 -0
- package/dist/workers/indentationGuesser.js +178 -0
- package/dist/workers/indentationLineProcessor.js +193 -0
- package/dist/workers/index.js +21 -0
- package/dist/workers/indexTreeModel.js +538 -0
- package/dist/workers/ini.contribution.js +9 -0
- package/dist/workers/ini.js +70 -0
- package/dist/workers/initialize.js +11 -0
- package/dist/workers/inlayHints.js +147 -0
- package/dist/workers/inlayHintsContribution.js +11 -0
- package/dist/workers/inlayHintsController.js +686 -0
- package/dist/workers/inlayHintsHover.js +162 -0
- package/dist/workers/inlayHintsLocations.js +96 -0
- package/dist/workers/inlineCompletionContextKeys.js +23 -0
- package/dist/workers/inlineCompletions.contribution.js +31 -0
- package/dist/workers/inlineCompletionsAccessibleView.js +4 -0
- package/dist/workers/inlineCompletionsController.js +427 -0
- package/dist/workers/inlineCompletionsHintsWidget.js +356 -0
- package/dist/workers/inlineCompletionsModel.js +1048 -0
- package/dist/workers/inlineCompletionsService.js +170 -0
- package/dist/workers/inlineCompletionsSource.js +548 -0
- package/dist/workers/inlineCompletionsView.js +86 -0
- package/dist/workers/inlineDecorations.js +26 -0
- package/dist/workers/inlineDiffDeletedCodeMargin.js +138 -0
- package/dist/workers/inlineEdit.js +17 -0
- package/dist/workers/inlineEditWithChanges.js +30 -0
- package/dist/workers/inlineEditsCollapsedView.js +132 -0
- package/dist/workers/inlineEditsCustomView.js +256 -0
- package/dist/workers/inlineEditsDeletionView.js +178 -0
- package/dist/workers/inlineEditsInsertionView.js +267 -0
- package/dist/workers/inlineEditsLineReplacementView.js +329 -0
- package/dist/workers/inlineEditsModel.js +59 -0
- package/dist/workers/inlineEditsNewUsers.js +174 -0
- package/dist/workers/inlineEditsSideBySideView.js +517 -0
- package/dist/workers/inlineEditsView.js +561 -0
- package/dist/workers/inlineEditsViewInterface.js +21 -0
- package/dist/workers/inlineEditsViewProducer.js +119 -0
- package/dist/workers/inlineEditsWordReplacementView.js +211 -0
- package/dist/workers/inlineProgress.js +139 -0
- package/dist/workers/inlineSuggestionItem.js +497 -0
- package/dist/workers/inplaceReplaceSupport.js +87 -0
- package/dist/workers/inputBox.js +510 -0
- package/dist/workers/inputColors.js +66 -0
- package/dist/workers/inputMode.js +22 -0
- package/dist/workers/insertFinalNewLine.js +32 -0
- package/dist/workers/insertFinalNewLineCommand.js +39 -0
- package/dist/workers/inspectTokens.js +240 -0
- package/dist/workers/instantiation.js +44 -0
- package/dist/workers/instantiationService.js +403 -0
- package/dist/workers/intervalTree.js +1002 -0
- package/dist/workers/iterator.js +186 -0
- package/dist/workers/java.contribution.js +9 -0
- package/dist/workers/java.js +231 -0
- package/dist/workers/javascript.contribution.js +11 -0
- package/dist/workers/javascript.js +70 -0
- package/dist/workers/jsonContributionRegistry.js +42 -0
- package/dist/workers/jsonMode.js +224 -0
- package/dist/workers/jsonWorker.js +187 -0
- package/dist/workers/julia.contribution.js +8 -0
- package/dist/workers/julia.js +510 -0
- package/dist/workers/keyCodes.js +351 -0
- package/dist/workers/keybinding.js +9 -0
- package/dist/workers/keybindingCancellation.js +81 -0
- package/dist/workers/keybindingLabel.js +122 -0
- package/dist/workers/keybindingLabels.js +139 -0
- package/dist/workers/keybindingResolver.js +304 -0
- package/dist/workers/keybindings.js +104 -0
- package/dist/workers/keybindingsRegistry.js +111 -0
- package/dist/workers/keyboardEvent.js +125 -0
- package/dist/workers/korean.js +321 -0
- package/dist/workers/kotlin.contribution.js +9 -0
- package/dist/workers/kotlin.js +251 -0
- package/dist/workers/label.js +5 -0
- package/dist/workers/labels.js +15 -0
- package/dist/workers/language.js +9 -0
- package/dist/workers/languageBracketsConfiguration.js +133 -0
- package/dist/workers/languageConfiguration.js +138 -0
- package/dist/workers/languageConfigurationRegistry.js +361 -0
- package/dist/workers/languageFeatureDebounce.js +137 -0
- package/dist/workers/languageFeatureRegistry.js +180 -0
- package/dist/workers/languageFeatures.js +9 -0
- package/dist/workers/languageFeaturesService.js +47 -0
- package/dist/workers/languageSelector.js +112 -0
- package/dist/workers/languageService.js +92 -0
- package/dist/workers/languages.js +522 -0
- package/dist/workers/languagesAssociations.js +193 -0
- package/dist/workers/languagesRegistry.js +237 -0
- package/dist/workers/layoutService.js +9 -0
- package/dist/workers/lazy.js +49 -0
- package/dist/workers/lazyObservableValue.js +125 -0
- package/dist/workers/legacyLinesDiffComputer.js +468 -0
- package/dist/workers/length.js +129 -0
- package/dist/workers/less.contribution.js +9 -0
- package/dist/workers/less.js +160 -0
- package/dist/workers/lexon.contribution.js +8 -0
- package/dist/workers/lexon.js +156 -0
- package/dist/workers/lib.index.js +103 -0
- package/dist/workers/lib.js +1107 -0
- package/dist/workers/lifecycle.js +311 -0
- package/dist/workers/lightBulbWidget.js +427 -0
- package/dist/workers/lineCommentCommand.js +328 -0
- package/dist/workers/lineDecorations.js +208 -0
- package/dist/workers/lineEdit.js +75 -0
- package/dist/workers/lineHeights.js +370 -0
- package/dist/workers/lineNumbers.js +184 -0
- package/dist/workers/linePart.js +25 -0
- package/dist/workers/lineRange.js +312 -0
- package/dist/workers/lineSelection.js +36 -0
- package/dist/workers/lineSequence.js +36 -0
- package/dist/workers/lineTokens.js +405 -0
- package/dist/workers/linesDecorations.js +104 -0
- package/dist/workers/linesDiffComputer.js +29 -0
- package/dist/workers/linesDiffComputers.js +13 -0
- package/dist/workers/linesLayout.js +765 -0
- package/dist/workers/linesOperations.js +1187 -0
- package/dist/workers/linesSliceCharSequence.js +205 -0
- package/dist/workers/link.js +95 -0
- package/dist/workers/linkComputer.js +269 -0
- package/dist/workers/linkedEditing.js +381 -0
- package/dist/workers/linkedList.js +126 -0
- package/dist/workers/linkedText.js +48 -0
- package/dist/workers/links.js +376 -0
- package/dist/workers/liquid.contribution.js +9 -0
- package/dist/workers/liquid.js +306 -0
- package/dist/workers/list.js +11 -0
- package/dist/workers/listColors.js +51 -0
- package/dist/workers/listPaging.js +128 -0
- package/dist/workers/listService.js +1025 -0
- package/dist/workers/listView.js +1173 -0
- package/dist/workers/listWidget.js +1535 -0
- package/dist/workers/log.js +271 -0
- package/dist/workers/logService.js +40 -0
- package/dist/workers/logging.js +86 -0
- package/dist/workers/longLinesHelper.js +23 -0
- package/dist/workers/lspLanguageFeatures.js +716 -0
- package/dist/workers/lua.contribution.js +8 -0
- package/dist/workers/lua.js +161 -0
- package/dist/workers/m3.contribution.js +8 -0
- package/dist/workers/m3.js +209 -0
- package/dist/workers/map.js +670 -0
- package/dist/workers/margin.js +71 -0
- package/dist/workers/marginDecorations.js +84 -0
- package/dist/workers/markdown.contribution.js +8 -0
- package/dist/workers/markdown.js +228 -0
- package/dist/workers/markdownHoverParticipant.js +419 -0
- package/dist/workers/markdownRenderer.js +73 -0
- package/dist/workers/marked.js +2478 -0
- package/dist/workers/markerDecorations.js +9 -0
- package/dist/workers/markerDecorationsService.js +248 -0
- package/dist/workers/markerHoverParticipant.js +270 -0
- package/dist/workers/markerNavigationService.js +223 -0
- package/dist/workers/markerService.js +330 -0
- package/dist/workers/markers.js +127 -0
- package/dist/workers/marshalling.js +62 -0
- package/dist/workers/mdx.contribution.js +8 -0
- package/dist/workers/mdx.js +230 -0
- package/dist/workers/menu.js +1147 -0
- package/dist/workers/menuColors.js +19 -0
- package/dist/workers/menuEntryActionViewItem.js +519 -0
- package/dist/workers/menuService.js +436 -0
- package/dist/workers/messageController.js +186 -0
- package/dist/workers/middleScroll.contribution.js +8 -0
- package/dist/workers/middleScrollController.js +128 -0
- package/dist/workers/migrateOptions.js +220 -0
- package/dist/workers/mime.js +11 -0
- package/dist/workers/minimap.js +1662 -0
- package/dist/workers/minimapCharRenderer.js +90 -0
- package/dist/workers/minimapCharRendererFactory.js +136 -0
- package/dist/workers/minimapCharSheet.js +25 -0
- package/dist/workers/minimapColors.js +23 -0
- package/dist/workers/minimapPreBaked.js +52 -0
- package/dist/workers/minimapTokensColorTracker.js +58 -0
- package/dist/workers/mips.contribution.js +9 -0
- package/dist/workers/mips.js +197 -0
- package/dist/workers/mirrorTextModel.js +117 -0
- package/dist/workers/miscColors.js +32 -0
- package/dist/workers/model.js +9 -0
- package/dist/workers/modelLineProjection.js +350 -0
- package/dist/workers/modelLineProjectionData.js +297 -0
- package/dist/workers/modelService.js +413 -0
- package/dist/workers/modesRegistry.js +75 -0
- package/dist/workers/monaco.contribution.js +302 -0
- package/dist/workers/monarchCommon.js +147 -0
- package/dist/workers/monarchCompile.js +546 -0
- package/dist/workers/monarchLexer.js +764 -0
- package/dist/workers/monospaceLineBreaksComputer.js +473 -0
- package/dist/workers/mouseCursor.js +9 -0
- package/dist/workers/mouseEvent.js +153 -0
- package/dist/workers/mouseHandler.js +539 -0
- package/dist/workers/mouseTarget.js +978 -0
- package/dist/workers/moveCaretCommand.js +49 -0
- package/dist/workers/moveLinesCommand.js +394 -0
- package/dist/workers/movedBlocksLinesFeature.js +277 -0
- package/dist/workers/msdax.contribution.js +8 -0
- package/dist/workers/msdax.js +374 -0
- package/dist/workers/multiDiffEditorWidget.js +43 -0
- package/dist/workers/multiDiffEditorWidgetImpl.js +427 -0
- package/dist/workers/multicursor.js +1004 -0
- package/dist/workers/myersDiffAlgorithm.js +159 -0
- package/dist/workers/mysql.contribution.js +8 -0
- package/dist/workers/mysql.js +877 -0
- package/dist/workers/nativeEditContext.js +518 -0
- package/dist/workers/nativeEditContextRegistry.js +23 -0
- package/dist/workers/nativeEditContextUtils.js +85 -0
- package/dist/workers/navigator.js +36 -0
- package/dist/workers/network.js +267 -0
- package/dist/workers/nls.js +76 -0
- package/dist/workers/nls.messages.js +18 -0
- package/dist/workers/nodeReader.js +127 -0
- package/dist/workers/normalization.js +41 -0
- package/dist/workers/notification.js +9 -0
- package/dist/workers/nullTokenize.js +29 -0
- package/dist/workers/numbers.js +45 -0
- package/dist/workers/objectCollectionBuffer.js +102 -0
- package/dist/workers/objectPool.js +47 -0
- package/dist/workers/objectTree.js +204 -0
- package/dist/workers/objectTreeModel.js +220 -0
- package/dist/workers/objective-c.contribution.js +8 -0
- package/dist/workers/objective-c.js +182 -0
- package/dist/workers/objects.js +152 -0
- package/dist/workers/observableCodeEditor.js +373 -0
- package/dist/workers/observableFromEvent.js +123 -0
- package/dist/workers/observableSignal.js +47 -0
- package/dist/workers/observableSignalFromEvent.js +41 -0
- package/dist/workers/observableValue.js +105 -0
- package/dist/workers/observableValueOpts.js +20 -0
- package/dist/workers/offsetRange.js +225 -0
- package/dist/workers/onEnter.js +109 -0
- package/dist/workers/oneCursor.js +117 -0
- package/dist/workers/opener.js +43 -0
- package/dist/workers/openerService.js +222 -0
- package/dist/workers/originalEditorInlineDiffView.js +215 -0
- package/dist/workers/outlineModel.js +265 -0
- package/dist/workers/overlayWidgets.js +181 -0
- package/dist/workers/overviewRuler.js +134 -0
- package/dist/workers/overviewRulerFeature.js +168 -0
- package/dist/workers/overviewZoneManager.js +176 -0
- package/dist/workers/parameterHints.js +126 -0
- package/dist/workers/parameterHintsModel.js +258 -0
- package/dist/workers/parameterHintsWidget.js +318 -0
- package/dist/workers/parser.js +121 -0
- package/dist/workers/pascal.contribution.js +9 -0
- package/dist/workers/pascal.js +250 -0
- package/dist/workers/pascaligo.contribution.js +8 -0
- package/dist/workers/pascaligo.js +163 -0
- package/dist/workers/path.js +1451 -0
- package/dist/workers/peekView.js +246 -0
- package/dist/workers/performance.js +222 -0
- package/dist/workers/perl.contribution.js +8 -0
- package/dist/workers/perl.js +625 -0
- package/dist/workers/pgsql.contribution.js +8 -0
- package/dist/workers/pgsql.js +850 -0
- package/dist/workers/php.contribution.js +9 -0
- package/dist/workers/php.js +499 -0
- package/dist/workers/pickerQuickAccess.js +271 -0
- package/dist/workers/pieceTreeBase.js +1473 -0
- package/dist/workers/pieceTreeTextBuffer.js +461 -0
- package/dist/workers/pieceTreeTextBufferBuilder.js +140 -0
- package/dist/workers/pixelRatio.js +88 -0
- package/dist/workers/pla.contribution.js +7 -0
- package/dist/workers/pla.js +136 -0
- package/dist/workers/placeholderText.contribution.js +14 -0
- package/dist/workers/placeholderTextContribution.js +77 -0
- package/dist/workers/platform.js +32 -0
- package/dist/workers/platformObservableUtils.js +31 -0
- package/dist/workers/point.js +50 -0
- package/dist/workers/pointerHandler.js +132 -0
- package/dist/workers/position.js +142 -0
- package/dist/workers/positionToOffset.js +17 -0
- package/dist/workers/positionToOffsetImpl.js +98 -0
- package/dist/workers/postEditWidget.js +220 -0
- package/dist/workers/postiats.contribution.js +8 -0
- package/dist/workers/postiats.js +906 -0
- package/dist/workers/powerquery.contribution.js +8 -0
- package/dist/workers/powerquery.js +889 -0
- package/dist/workers/powershell.contribution.js +8 -0
- package/dist/workers/powershell.js +238 -0
- package/dist/workers/prefixSumComputer.js +226 -0
- package/dist/workers/process.js +61 -0
- package/dist/workers/product.js +70 -0
- package/dist/workers/productService.js +9 -0
- package/dist/workers/progress.js +16 -0
- package/dist/workers/progressbar.js +105 -0
- package/dist/workers/promise.js +56 -0
- package/dist/workers/protobuf.contribution.js +8 -0
- package/dist/workers/protobuf.js +419 -0
- package/dist/workers/provideInlineCompletions.js +372 -0
- package/dist/workers/provideSignatureHelp.js +59 -0
- package/dist/workers/pug.contribution.js +8 -0
- package/dist/workers/pug.js +401 -0
- package/dist/workers/python.contribution.js +9 -0
- package/dist/workers/python.js +366 -0
- package/dist/workers/qsharp.contribution.js +8 -0
- package/dist/workers/qsharp.js +300 -0
- package/dist/workers/quickAccess.js +56 -0
- package/dist/workers/quickInput.js +108 -0
- package/dist/workers/quickInputActions.js +189 -0
- package/dist/workers/quickInputBox.js +104 -0
- package/dist/workers/quickInputController.js +901 -0
- package/dist/workers/quickInputDelegate.js +19 -0
- package/dist/workers/quickInputList.js +1391 -0
- package/dist/workers/quickInputService.js +197 -0
- package/dist/workers/quickInputTree.js +37 -0
- package/dist/workers/quickInputTreeAccessibilityProvider.js +39 -0
- package/dist/workers/quickInputTreeController.js +181 -0
- package/dist/workers/quickInputTreeFilter.js +42 -0
- package/dist/workers/quickInputTreeRenderer.js +141 -0
- package/dist/workers/quickInputTreeSorter.js +48 -0
- package/dist/workers/quickInputUtils.js +89 -0
- package/dist/workers/quickpickColors.js +21 -0
- package/dist/workers/r.contribution.js +8 -0
- package/dist/workers/r.js +242 -0
- package/dist/workers/range.js +421 -0
- package/dist/workers/rangeMap.js +161 -0
- package/dist/workers/rangeMapping.js +229 -0
- package/dist/workers/rangeSingleLine.js +17 -0
- package/dist/workers/rangeUtil.js +117 -0
- package/dist/workers/razor.contribution.js +9 -0
- package/dist/workers/razor.js +616 -0
- package/dist/workers/rbTreeBase.js +362 -0
- package/dist/workers/rect.js +163 -0
- package/dist/workers/rectangleRenderer.js +214 -0
- package/dist/workers/rectangleRenderer.wgsl.js +68 -0
- package/dist/workers/redis.contribution.js +8 -0
- package/dist/workers/redis.js +301 -0
- package/dist/workers/redshift.contribution.js +8 -0
- package/dist/workers/redshift.js +808 -0
- package/dist/workers/reducer.js +46 -0
- package/dist/workers/referencesController.js +382 -0
- package/dist/workers/referencesModel.js +241 -0
- package/dist/workers/referencesTree.js +200 -0
- package/dist/workers/referencesWidget.js +525 -0
- package/dist/workers/registrations.contribution.js +82 -0
- package/dist/workers/rename.js +458 -0
- package/dist/workers/renameWidget.js +741 -0
- package/dist/workers/renderLines.js +185 -0
- package/dist/workers/renderingContext.js +118 -0
- package/dist/workers/replaceAllCommand.js +54 -0
- package/dist/workers/replaceCommand.js +158 -0
- package/dist/workers/replaceInput.js +176 -0
- package/dist/workers/replacePattern.js +289 -0
- package/dist/workers/replaceWidgetHistory.js +85 -0
- package/dist/workers/resizable.js +150 -0
- package/dist/workers/resizableContentWidget.js +92 -0
- package/dist/workers/resolvedKeybindingItem.js +35 -0
- package/dist/workers/resolverService.js +5 -0
- package/dist/workers/resources.js +231 -0
- package/dist/workers/restructuredtext.contribution.js +8 -0
- package/dist/workers/restructuredtext.js +173 -0
- package/dist/workers/revertButtonsFeature.js +149 -0
- package/dist/workers/rgba.js +35 -0
- package/dist/workers/richEditBrackets.js +356 -0
- package/dist/workers/rowCache.js +110 -0
- package/dist/workers/rpc.js +57 -0
- package/dist/workers/ruby.contribution.js +9 -0
- package/dist/workers/ruby.js +510 -0
- package/dist/workers/rulers.js +82 -0
- package/dist/workers/rulersGpu.js +66 -0
- package/dist/workers/runOnChange.js +61 -0
- package/dist/workers/rust.contribution.js +8 -0
- package/dist/workers/rust.js +342 -0
- package/dist/workers/sash.js +451 -0
- package/dist/workers/sb.contribution.js +8 -0
- package/dist/workers/sb.js +114 -0
- package/dist/workers/scala.contribution.js +9 -0
- package/dist/workers/scala.js +369 -0
- package/dist/workers/scanner.js +287 -0
- package/dist/workers/scheme.contribution.js +8 -0
- package/dist/workers/scheme.js +107 -0
- package/dist/workers/screenReaderContentRich.js +337 -0
- package/dist/workers/screenReaderContentSimple.js +194 -0
- package/dist/workers/screenReaderSupport.js +175 -0
- package/dist/workers/screenReaderUtils.js +111 -0
- package/dist/workers/scrollDecoration.js +70 -0
- package/dist/workers/scrollable.js +323 -0
- package/dist/workers/scrollableElement.js +603 -0
- package/dist/workers/scrollbarArrow.js +78 -0
- package/dist/workers/scrollbarState.js +163 -0
- package/dist/workers/scrollbarVisibilityController.js +93 -0
- package/dist/workers/scss.contribution.js +9 -0
- package/dist/workers/scss.js +259 -0
- package/dist/workers/search.js +52 -0
- package/dist/workers/searchColors.js +13 -0
- package/dist/workers/sectionHeaders.js +179 -0
- package/dist/workers/selectBox.js +47 -0
- package/dist/workers/selectBoxCustom.js +858 -0
- package/dist/workers/selectBoxNative.js +142 -0
- package/dist/workers/selection.js +145 -0
- package/dist/workers/selections.js +338 -0
- package/dist/workers/semanticTokensConfig.js +14 -0
- package/dist/workers/semanticTokensDto.js +82 -0
- package/dist/workers/semanticTokensProviderStyling.js +263 -0
- package/dist/workers/semanticTokensStyling.js +9 -0
- package/dist/workers/semanticTokensStylingService.js +47 -0
- package/dist/workers/serviceCollection.js +22 -0
- package/dist/workers/severity.js +52 -0
- package/dist/workers/severityIcon.js +29 -0
- package/dist/workers/shell.contribution.js +8 -0
- package/dist/workers/shell.js +220 -0
- package/dist/workers/shiftCommand.js +241 -0
- package/dist/workers/singleTextEditHelpers.js +32 -0
- package/dist/workers/smallImmutableSet.js +108 -0
- package/dist/workers/smartSelect.js +281 -0
- package/dist/workers/snippetController2.js +297 -0
- package/dist/workers/snippetParser.js +890 -0
- package/dist/workers/snippetSession.js +650 -0
- package/dist/workers/snippetVariables.js +323 -0
- package/dist/workers/solidity.contribution.js +8 -0
- package/dist/workers/solidity.js +1366 -0
- package/dist/workers/sophia.contribution.js +8 -0
- package/dist/workers/sophia.js +198 -0
- package/dist/workers/sortLinesCommand.js +81 -0
- package/dist/workers/sparql.contribution.js +8 -0
- package/dist/workers/sparql.js +200 -0
- package/dist/workers/sparseMultilineTokens.js +548 -0
- package/dist/workers/sparseTokensStore.js +210 -0
- package/dist/workers/splice.js +14 -0
- package/dist/workers/splitview.js +829 -0
- package/dist/workers/sql.contribution.js +8 -0
- package/dist/workers/sql.js +852 -0
- package/dist/workers/st.contribution.js +8 -0
- package/dist/workers/st.js +415 -0
- package/dist/workers/stableEditorScroll.js +52 -0
- package/dist/workers/standaloneCodeEditor.js +335 -0
- package/dist/workers/standaloneCodeEditorService.js +96 -0
- package/dist/workers/standaloneColorPickerActions.js +81 -0
- package/dist/workers/standaloneColorPickerController.js +62 -0
- package/dist/workers/standaloneColorPickerParticipant.js +117 -0
- package/dist/workers/standaloneColorPickerWidget.js +215 -0
- package/dist/workers/standaloneCommandsQuickAccess.js +82 -0
- package/dist/workers/standaloneEditor.js +519 -0
- package/dist/workers/standaloneEnums.js +1017 -0
- package/dist/workers/standaloneGotoLineQuickAccess.js +67 -0
- package/dist/workers/standaloneGotoSymbolQuickAccess.js +77 -0
- package/dist/workers/standaloneHelpQuickAccess.js +14 -0
- package/dist/workers/standaloneLanguages.js +621 -0
- package/dist/workers/standaloneLayoutService.js +74 -0
- package/dist/workers/standaloneQuickInputService.js +150 -0
- package/dist/workers/standaloneReferenceSearch.js +38 -0
- package/dist/workers/standaloneServices.js +787 -0
- package/dist/workers/standaloneStrings.js +42 -0
- package/dist/workers/standaloneTheme.js +9 -0
- package/dist/workers/standaloneThemeService.js +367 -0
- package/dist/workers/standaloneTreeSitterLibraryService.js +23 -0
- package/dist/workers/standaloneWebWorker.js +55 -0
- package/dist/workers/stickyScrollActions.js +132 -0
- package/dist/workers/stickyScrollContribution.js +16 -0
- package/dist/workers/stickyScrollController.js +566 -0
- package/dist/workers/stickyScrollElement.js +39 -0
- package/dist/workers/stickyScrollModelProvider.js +338 -0
- package/dist/workers/stickyScrollProvider.js +197 -0
- package/dist/workers/stickyScrollWidget.js +474 -0
- package/dist/workers/stopwatch.js +30 -0
- package/dist/workers/storage.js +200 -0
- package/dist/workers/stringBuilder.js +122 -0
- package/dist/workers/stringEdit.js +165 -0
- package/dist/workers/strings.js +834 -0
- package/dist/workers/structuredLogger.js +56 -0
- package/dist/workers/suggest.js +322 -0
- package/dist/workers/suggestAlternatives.js +95 -0
- package/dist/workers/suggestCommitCharacters.js +59 -0
- package/dist/workers/suggestController.js +941 -0
- package/dist/workers/suggestInlineCompletions.js +193 -0
- package/dist/workers/suggestMemory.js +254 -0
- package/dist/workers/suggestModel.js +667 -0
- package/dist/workers/suggestOvertypingCapturer.js +62 -0
- package/dist/workers/suggestWidget.js +890 -0
- package/dist/workers/suggestWidgetAdapter.js +210 -0
- package/dist/workers/suggestWidgetDetails.js +393 -0
- package/dist/workers/suggestWidgetRenderer.js +208 -0
- package/dist/workers/suggestWidgetStatus.js +74 -0
- package/dist/workers/supports.js +58 -0
- package/dist/workers/surroundSelectionCommand.js +44 -0
- package/dist/workers/swift.contribution.js +9 -0
- package/dist/workers/swift.js +311 -0
- package/dist/workers/symbolIcons.js +101 -0
- package/dist/workers/symbolNavigation.js +178 -0
- package/dist/workers/symbols.js +10 -0
- package/dist/workers/syntaxRangeProvider.js +177 -0
- package/dist/workers/systemverilog.contribution.js +14 -0
- package/dist/workers/systemverilog.js +575 -0
- package/dist/workers/tabFocus.js +29 -0
- package/dist/workers/tableWidget.js +181 -0
- package/dist/workers/taskQueue.js +116 -0
- package/dist/workers/tcl.contribution.js +8 -0
- package/dist/workers/tcl.js +231 -0
- package/dist/workers/telemetry.js +9 -0
- package/dist/workers/ternarySearchTree.js +674 -0
- package/dist/workers/textAreaEditContext.js +720 -0
- package/dist/workers/textAreaEditContextInput.js +588 -0
- package/dist/workers/textAreaEditContextState.js +160 -0
- package/dist/workers/textChange.js +248 -0
- package/dist/workers/textEdit.js +269 -0
- package/dist/workers/textLength.js +87 -0
- package/dist/workers/textModel.js +2031 -0
- package/dist/workers/textModelBracketPairs.js +45 -0
- package/dist/workers/textModelDefaults.js +18 -0
- package/dist/workers/textModelEditSource.js +166 -0
- package/dist/workers/textModelEvents.js +216 -0
- package/dist/workers/textModelGuides.js +40 -0
- package/dist/workers/textModelPart.js +23 -0
- package/dist/workers/textModelSearch.js +455 -0
- package/dist/workers/textModelStringEdit.js +11 -0
- package/dist/workers/textModelSync.impl.js +307 -0
- package/dist/workers/textModelText.js +26 -0
- package/dist/workers/textModelTokens.js +436 -0
- package/dist/workers/textResourceConfiguration.js +6 -0
- package/dist/workers/textToHtmlTokenizer.js +139 -0
- package/dist/workers/textualHighlightProvider.js +78 -0
- package/dist/workers/textureAtlas.js +179 -0
- package/dist/workers/textureAtlasPage.js +110 -0
- package/dist/workers/textureAtlasShelfAllocator.js +129 -0
- package/dist/workers/textureAtlasSlabAllocator.js +346 -0
- package/dist/workers/tfIdf.js +179 -0
- package/dist/workers/themables.js +100 -0
- package/dist/workers/theme.js +110 -0
- package/dist/workers/themeService.js +67 -0
- package/dist/workers/themes.js +242 -0
- package/dist/workers/toggle.js +242 -0
- package/dist/workers/toggleHighContrast.js +35 -0
- package/dist/workers/toggleTabFocusMode.js +42 -0
- package/dist/workers/tokenStore.js +407 -0
- package/dist/workers/tokenWithTextArray.js +73 -0
- package/dist/workers/tokenization.js +29 -0
- package/dist/workers/tokenizationRegistry.js +123 -0
- package/dist/workers/tokenizationTextModelPart.js +275 -0
- package/dist/workers/tokenizer.js +301 -0
- package/dist/workers/tokenizerSyntaxTokenBackend.js +261 -0
- package/dist/workers/toolbar.js +244 -0
- package/dist/workers/touch.js +270 -0
- package/dist/workers/transaction.js +109 -0
- package/dist/workers/transpose.js +65 -0
- package/dist/workers/tree.js +45 -0
- package/dist/workers/treeSitterLibraryService.js +9 -0
- package/dist/workers/treeSitterSyntaxTokenBackend.js +167 -0
- package/dist/workers/treeSitterThemeService.js +9 -0
- package/dist/workers/treeSitterTokenizationImpl.js +713 -0
- package/dist/workers/treeSitterTree.js +395 -0
- package/dist/workers/treeViewsDnd.js +24 -0
- package/dist/workers/treeViewsDndService.js +12 -0
- package/dist/workers/triggerInlineEditCommandsRegistry.js +18 -0
- package/dist/workers/trimTrailingWhitespaceCommand.js +98 -0
- package/dist/workers/trustedTypes.js +29 -0
- package/dist/workers/tsMode.js +212 -0
- package/dist/workers/tsWorker.js +352 -0
- package/dist/workers/twig.contribution.js +9 -0
- package/dist/workers/twig.js +391 -0
- package/dist/workers/types.js +144 -0
- package/dist/workers/typescript.contribution.js +11 -0
- package/dist/workers/typescript.js +408 -0
- package/dist/workers/typescriptServices.js +210154 -0
- package/dist/workers/typescriptServicesMetadata.js +3 -0
- package/dist/workers/typespec.contribution.js +8 -0
- package/dist/workers/typespec.js +126 -0
- package/dist/workers/typingSpeed.js +165 -0
- package/dist/workers/uint.js +24 -0
- package/dist/workers/undoRedo.js +43 -0
- package/dist/workers/undoRedoService.js +1076 -0
- package/dist/workers/unicodeHighlighter.js +673 -0
- package/dist/workers/unicodeTextModelHighlighter.js +188 -0
- package/dist/workers/unusualLineTerminators.js +113 -0
- package/dist/workers/updatableHoverWidget.js +107 -0
- package/dist/workers/uri.js +606 -0
- package/dist/workers/usLayoutResolvedKeybinding.js +175 -0
- package/dist/workers/utils.js +209 -0
- package/dist/workers/utilsCancellation.js +63 -0
- package/dist/workers/uuid.js +53 -0
- package/dist/workers/validation.js +159 -0
- package/dist/workers/vb.contribution.js +8 -0
- package/dist/workers/vb.js +371 -0
- package/dist/workers/verticalScrollbar.js +94 -0
- package/dist/workers/view.js +720 -0
- package/dist/workers/viewContext.js +22 -0
- package/dist/workers/viewController.js +274 -0
- package/dist/workers/viewCursor.js +218 -0
- package/dist/workers/viewCursors.js +339 -0
- package/dist/workers/viewEventHandler.js +186 -0
- package/dist/workers/viewEvents.js +180 -0
- package/dist/workers/viewGpuContext.js +241 -0
- package/dist/workers/viewLayer.js +478 -0
- package/dist/workers/viewLayout.js +368 -0
- package/dist/workers/viewLine.js +544 -0
- package/dist/workers/viewLineOptions.js +43 -0
- package/dist/workers/viewLineRenderer.js +948 -0
- package/dist/workers/viewLines.js +721 -0
- package/dist/workers/viewLinesGpu.js +571 -0
- package/dist/workers/viewLinesViewportData.js +30 -0
- package/dist/workers/viewModel.js +98 -0
- package/dist/workers/viewModelDecoration.js +55 -0
- package/dist/workers/viewModelDecorations.js +132 -0
- package/dist/workers/viewModelEventDispatcher.js +398 -0
- package/dist/workers/viewModelImpl.js +1163 -0
- package/dist/workers/viewModelLines.js +938 -0
- package/dist/workers/viewOverlays.js +204 -0
- package/dist/workers/viewPart.js +49 -0
- package/dist/workers/viewUserInputEvents.js +91 -0
- package/dist/workers/viewZones.js +335 -0
- package/dist/workers/viewportRenderStrategy.js +316 -0
- package/dist/workers/viewportSemanticTokens.js +166 -0
- package/dist/workers/webWorker.js +396 -0
- package/dist/workers/webWorkerBootstrap.js +20 -0
- package/dist/workers/webWorkerFactory.js +171 -0
- package/dist/workers/wgsl.contribution.js +8 -0
- package/dist/workers/wgsl.js +452 -0
- package/dist/workers/whitespace.js +277 -0
- package/dist/workers/widget.js +44 -0
- package/dist/workers/window.js +60 -0
- package/dist/workers/wordCharacterClassifier.js +87 -0
- package/dist/workers/wordContextKey.js +69 -0
- package/dist/workers/wordDistance.js +64 -0
- package/dist/workers/wordHelper.js +127 -0
- package/dist/workers/wordHighlighter.js +796 -0
- package/dist/workers/wordOperations.js +442 -0
- package/dist/workers/wordPartOperations.js +145 -0
- package/dist/workers/wordSelections.js +82 -0
- package/dist/workers/workerManager.js +147 -0
- package/dist/workers/workers.js +141 -0
- package/dist/workers/workspace.js +84 -0
- package/dist/workers/workspaceTrust.js +9 -0
- package/dist/workers/wrapInHotClass.js +41 -0
- package/dist/workers/wrapInReloadableClass.js +35 -0
- package/dist/workers/xml.contribution.js +28 -0
- package/dist/workers/xml.js +160 -0
- package/dist/workers/yaml.contribution.js +9 -0
- package/dist/workers/yaml.js +271 -0
- package/dist/workers/zoneWidget.js +406 -0
- package/package.json +2 -2
- package/dist/assets/css.worker-C7FogG4G.js +0 -93
- package/dist/assets/editor.worker-iXcRX1Tq.js +0 -26
- package/dist/assets/html.worker-C8VxctEJ.js +0 -470
- package/dist/assets/json.worker-CMC9kgPL.js +0 -58
- package/dist/assets/ts.worker-CtTJ3hNN.js +0 -67731
|
@@ -0,0 +1,1197 @@
|
|
|
1
|
+
import { onUnexpectedError } from './errors.js';
|
|
2
|
+
import { createSingleCallFunction } from './functional.js';
|
|
3
|
+
import { Disposable, combinedDisposable, DisposableStore, toDisposable } from './lifecycle.js';
|
|
4
|
+
import { LinkedList } from './linkedList.js';
|
|
5
|
+
import { StopWatch } from './stopwatch.js';
|
|
6
|
+
|
|
7
|
+
/*---------------------------------------------------------------------------------------------
|
|
8
|
+
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
9
|
+
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
10
|
+
*--------------------------------------------------------------------------------------------*/
|
|
11
|
+
var Event;
|
|
12
|
+
(function (Event) {
|
|
13
|
+
Event.None = () => Disposable.None;
|
|
14
|
+
/**
|
|
15
|
+
* Given an event, returns another event which debounces calls and defers the listeners to a later task via a shared
|
|
16
|
+
* `setTimeout`. The event is converted into a signal (`Event<void>`) to avoid additional object creation as a
|
|
17
|
+
* result of merging events and to try prevent race conditions that could arise when using related deferred and
|
|
18
|
+
* non-deferred events.
|
|
19
|
+
*
|
|
20
|
+
* This is useful for deferring non-critical work (eg. general UI updates) to ensure it does not block critical work
|
|
21
|
+
* (eg. latency of keypress to text rendered).
|
|
22
|
+
*
|
|
23
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
24
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
25
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
26
|
+
*
|
|
27
|
+
* @param event The event source for the new event.
|
|
28
|
+
* @param disposable A disposable store to add the new EventEmitter to.
|
|
29
|
+
*/
|
|
30
|
+
function defer(event, disposable) {
|
|
31
|
+
return debounce(event, () => void 0, 0, undefined, true, undefined, disposable);
|
|
32
|
+
}
|
|
33
|
+
Event.defer = defer;
|
|
34
|
+
/**
|
|
35
|
+
* Given an event, returns another event which only fires once.
|
|
36
|
+
*
|
|
37
|
+
* @param event The event source for the new event.
|
|
38
|
+
*/
|
|
39
|
+
function once(event) {
|
|
40
|
+
return (listener, thisArgs = null, disposables) => {
|
|
41
|
+
// we need this, in case the event fires during the listener call
|
|
42
|
+
let didFire = false;
|
|
43
|
+
let result = undefined;
|
|
44
|
+
result = event(e => {
|
|
45
|
+
if (didFire) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
else if (result) {
|
|
49
|
+
result.dispose();
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
didFire = true;
|
|
53
|
+
}
|
|
54
|
+
return listener.call(thisArgs, e);
|
|
55
|
+
}, null, disposables);
|
|
56
|
+
if (didFire) {
|
|
57
|
+
result.dispose();
|
|
58
|
+
}
|
|
59
|
+
return result;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
Event.once = once;
|
|
63
|
+
/**
|
|
64
|
+
* Given an event, returns another event which only fires once, and only when the condition is met.
|
|
65
|
+
*
|
|
66
|
+
* @param event The event source for the new event.
|
|
67
|
+
*/
|
|
68
|
+
function onceIf(event, condition) {
|
|
69
|
+
return Event.once(Event.filter(event, condition));
|
|
70
|
+
}
|
|
71
|
+
Event.onceIf = onceIf;
|
|
72
|
+
/**
|
|
73
|
+
* Maps an event of one type into an event of another type using a mapping function, similar to how
|
|
74
|
+
* `Array.prototype.map` works.
|
|
75
|
+
*
|
|
76
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
77
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
78
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
79
|
+
*
|
|
80
|
+
* @param event The event source for the new event.
|
|
81
|
+
* @param map The mapping function.
|
|
82
|
+
* @param disposable A disposable store to add the new EventEmitter to.
|
|
83
|
+
*/
|
|
84
|
+
function map(event, map, disposable) {
|
|
85
|
+
return snapshot((listener, thisArgs = null, disposables) => event(i => listener.call(thisArgs, map(i)), null, disposables), disposable);
|
|
86
|
+
}
|
|
87
|
+
Event.map = map;
|
|
88
|
+
/**
|
|
89
|
+
* Wraps an event in another event that performs some function on the event object before firing.
|
|
90
|
+
*
|
|
91
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
92
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
93
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
94
|
+
*
|
|
95
|
+
* @param event The event source for the new event.
|
|
96
|
+
* @param each The function to perform on the event object.
|
|
97
|
+
* @param disposable A disposable store to add the new EventEmitter to.
|
|
98
|
+
*/
|
|
99
|
+
function forEach(event, each, disposable) {
|
|
100
|
+
return snapshot((listener, thisArgs = null, disposables) => event(i => { each(i); listener.call(thisArgs, i); }, null, disposables), disposable);
|
|
101
|
+
}
|
|
102
|
+
Event.forEach = forEach;
|
|
103
|
+
function filter(event, filter, disposable) {
|
|
104
|
+
return snapshot((listener, thisArgs = null, disposables) => event(e => filter(e) && listener.call(thisArgs, e), null, disposables), disposable);
|
|
105
|
+
}
|
|
106
|
+
Event.filter = filter;
|
|
107
|
+
/**
|
|
108
|
+
* Given an event, returns the same event but typed as `Event<void>`.
|
|
109
|
+
*/
|
|
110
|
+
function signal(event) {
|
|
111
|
+
return event;
|
|
112
|
+
}
|
|
113
|
+
Event.signal = signal;
|
|
114
|
+
function any(...events) {
|
|
115
|
+
return (listener, thisArgs = null, disposables) => {
|
|
116
|
+
const disposable = combinedDisposable(...events.map(event => event(e => listener.call(thisArgs, e))));
|
|
117
|
+
return addAndReturnDisposable(disposable, disposables);
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
Event.any = any;
|
|
121
|
+
/**
|
|
122
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
123
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
124
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
125
|
+
*/
|
|
126
|
+
function reduce(event, merge, initial, disposable) {
|
|
127
|
+
let output = initial;
|
|
128
|
+
return map(event, e => {
|
|
129
|
+
output = merge(output, e);
|
|
130
|
+
return output;
|
|
131
|
+
}, disposable);
|
|
132
|
+
}
|
|
133
|
+
Event.reduce = reduce;
|
|
134
|
+
function snapshot(event, disposable) {
|
|
135
|
+
let listener;
|
|
136
|
+
const options = {
|
|
137
|
+
onWillAddFirstListener() {
|
|
138
|
+
listener = event(emitter.fire, emitter);
|
|
139
|
+
},
|
|
140
|
+
onDidRemoveLastListener() {
|
|
141
|
+
listener?.dispose();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
const emitter = new Emitter(options);
|
|
145
|
+
disposable?.add(emitter);
|
|
146
|
+
return emitter.event;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Adds the IDisposable to the store if it's set, and returns it. Useful to
|
|
150
|
+
* Event function implementation.
|
|
151
|
+
*/
|
|
152
|
+
function addAndReturnDisposable(d, store) {
|
|
153
|
+
if (store instanceof Array) {
|
|
154
|
+
store.push(d);
|
|
155
|
+
}
|
|
156
|
+
else if (store) {
|
|
157
|
+
store.add(d);
|
|
158
|
+
}
|
|
159
|
+
return d;
|
|
160
|
+
}
|
|
161
|
+
function debounce(event, merge, delay = 100, leading = false, flushOnListenerRemove = false, leakWarningThreshold, disposable) {
|
|
162
|
+
let subscription;
|
|
163
|
+
let output = undefined;
|
|
164
|
+
let handle = undefined;
|
|
165
|
+
let numDebouncedCalls = 0;
|
|
166
|
+
let doFire;
|
|
167
|
+
const options = {
|
|
168
|
+
leakWarningThreshold,
|
|
169
|
+
onWillAddFirstListener() {
|
|
170
|
+
subscription = event(cur => {
|
|
171
|
+
numDebouncedCalls++;
|
|
172
|
+
output = merge(output, cur);
|
|
173
|
+
if (leading && !handle) {
|
|
174
|
+
emitter.fire(output);
|
|
175
|
+
output = undefined;
|
|
176
|
+
}
|
|
177
|
+
doFire = () => {
|
|
178
|
+
const _output = output;
|
|
179
|
+
output = undefined;
|
|
180
|
+
handle = undefined;
|
|
181
|
+
if (!leading || numDebouncedCalls > 1) {
|
|
182
|
+
emitter.fire(_output);
|
|
183
|
+
}
|
|
184
|
+
numDebouncedCalls = 0;
|
|
185
|
+
};
|
|
186
|
+
if (typeof delay === 'number') {
|
|
187
|
+
if (handle) {
|
|
188
|
+
clearTimeout(handle);
|
|
189
|
+
}
|
|
190
|
+
handle = setTimeout(doFire, delay);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
if (handle === undefined) {
|
|
194
|
+
handle = null;
|
|
195
|
+
queueMicrotask(doFire);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
},
|
|
200
|
+
onWillRemoveListener() {
|
|
201
|
+
if (flushOnListenerRemove && numDebouncedCalls > 0) {
|
|
202
|
+
doFire?.();
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
onDidRemoveLastListener() {
|
|
206
|
+
doFire = undefined;
|
|
207
|
+
subscription.dispose();
|
|
208
|
+
}
|
|
209
|
+
};
|
|
210
|
+
const emitter = new Emitter(options);
|
|
211
|
+
disposable?.add(emitter);
|
|
212
|
+
return emitter.event;
|
|
213
|
+
}
|
|
214
|
+
Event.debounce = debounce;
|
|
215
|
+
/**
|
|
216
|
+
* Debounces an event, firing after some delay (default=0) with an array of all event original objects.
|
|
217
|
+
*
|
|
218
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
219
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
220
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
221
|
+
*/
|
|
222
|
+
function accumulate(event, delay = 0, disposable) {
|
|
223
|
+
return Event.debounce(event, (last, e) => {
|
|
224
|
+
if (!last) {
|
|
225
|
+
return [e];
|
|
226
|
+
}
|
|
227
|
+
last.push(e);
|
|
228
|
+
return last;
|
|
229
|
+
}, delay, undefined, true, undefined, disposable);
|
|
230
|
+
}
|
|
231
|
+
Event.accumulate = accumulate;
|
|
232
|
+
/**
|
|
233
|
+
* Filters an event such that some condition is _not_ met more than once in a row, effectively ensuring duplicate
|
|
234
|
+
* event objects from different sources do not fire the same event object.
|
|
235
|
+
*
|
|
236
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
237
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
238
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
239
|
+
*
|
|
240
|
+
* @param event The event source for the new event.
|
|
241
|
+
* @param equals The equality condition.
|
|
242
|
+
* @param disposable A disposable store to add the new EventEmitter to.
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```
|
|
246
|
+
* // Fire only one time when a single window is opened or focused
|
|
247
|
+
* Event.latch(Event.any(onDidOpenWindow, onDidFocusWindow))
|
|
248
|
+
* ```
|
|
249
|
+
*/
|
|
250
|
+
function latch(event, equals = (a, b) => a === b, disposable) {
|
|
251
|
+
let firstCall = true;
|
|
252
|
+
let cache;
|
|
253
|
+
return filter(event, value => {
|
|
254
|
+
const shouldEmit = firstCall || !equals(value, cache);
|
|
255
|
+
firstCall = false;
|
|
256
|
+
cache = value;
|
|
257
|
+
return shouldEmit;
|
|
258
|
+
}, disposable);
|
|
259
|
+
}
|
|
260
|
+
Event.latch = latch;
|
|
261
|
+
/**
|
|
262
|
+
* Splits an event whose parameter is a union type into 2 separate events for each type in the union.
|
|
263
|
+
*
|
|
264
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
265
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
266
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
267
|
+
*
|
|
268
|
+
* @example
|
|
269
|
+
* ```
|
|
270
|
+
* const event = new EventEmitter<number | undefined>().event;
|
|
271
|
+
* const [numberEvent, undefinedEvent] = Event.split(event, isUndefined);
|
|
272
|
+
* ```
|
|
273
|
+
*
|
|
274
|
+
* @param event The event source for the new event.
|
|
275
|
+
* @param isT A function that determines what event is of the first type.
|
|
276
|
+
* @param disposable A disposable store to add the new EventEmitter to.
|
|
277
|
+
*/
|
|
278
|
+
function split(event, isT, disposable) {
|
|
279
|
+
return [
|
|
280
|
+
Event.filter(event, isT, disposable),
|
|
281
|
+
Event.filter(event, e => !isT(e), disposable),
|
|
282
|
+
];
|
|
283
|
+
}
|
|
284
|
+
Event.split = split;
|
|
285
|
+
/**
|
|
286
|
+
* Buffers an event until it has a listener attached.
|
|
287
|
+
*
|
|
288
|
+
* *NOTE* that this function returns an `Event` and it MUST be called with a `DisposableStore` whenever the returned
|
|
289
|
+
* event is accessible to "third parties", e.g the event is a public property. Otherwise a leaked listener on the
|
|
290
|
+
* returned event causes this utility to leak a listener on the original event.
|
|
291
|
+
*
|
|
292
|
+
* @param event The event source for the new event.
|
|
293
|
+
* @param flushAfterTimeout Determines whether to flush the buffer after a timeout immediately or after a
|
|
294
|
+
* `setTimeout` when the first event listener is added.
|
|
295
|
+
* @param _buffer Internal: A source event array used for tests.
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```
|
|
299
|
+
* // Start accumulating events, when the first listener is attached, flush
|
|
300
|
+
* // the event after a timeout such that multiple listeners attached before
|
|
301
|
+
* // the timeout would receive the event
|
|
302
|
+
* this.onInstallExtension = Event.buffer(service.onInstallExtension, true);
|
|
303
|
+
* ```
|
|
304
|
+
*/
|
|
305
|
+
function buffer(event, flushAfterTimeout = false, _buffer = [], disposable) {
|
|
306
|
+
let buffer = _buffer.slice();
|
|
307
|
+
let listener = event(e => {
|
|
308
|
+
if (buffer) {
|
|
309
|
+
buffer.push(e);
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
emitter.fire(e);
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
if (disposable) {
|
|
316
|
+
disposable.add(listener);
|
|
317
|
+
}
|
|
318
|
+
const flush = () => {
|
|
319
|
+
buffer?.forEach(e => emitter.fire(e));
|
|
320
|
+
buffer = null;
|
|
321
|
+
};
|
|
322
|
+
const emitter = new Emitter({
|
|
323
|
+
onWillAddFirstListener() {
|
|
324
|
+
if (!listener) {
|
|
325
|
+
listener = event(e => emitter.fire(e));
|
|
326
|
+
if (disposable) {
|
|
327
|
+
disposable.add(listener);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
onDidAddFirstListener() {
|
|
332
|
+
if (buffer) {
|
|
333
|
+
if (flushAfterTimeout) {
|
|
334
|
+
setTimeout(flush);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
flush();
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
onDidRemoveLastListener() {
|
|
342
|
+
if (listener) {
|
|
343
|
+
listener.dispose();
|
|
344
|
+
}
|
|
345
|
+
listener = null;
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
if (disposable) {
|
|
349
|
+
disposable.add(emitter);
|
|
350
|
+
}
|
|
351
|
+
return emitter.event;
|
|
352
|
+
}
|
|
353
|
+
Event.buffer = buffer;
|
|
354
|
+
/**
|
|
355
|
+
* Wraps the event in an {@link IChainableEvent}, allowing a more functional programming style.
|
|
356
|
+
*
|
|
357
|
+
* @example
|
|
358
|
+
* ```
|
|
359
|
+
* // Normal
|
|
360
|
+
* const onEnterPressNormal = Event.filter(
|
|
361
|
+
* Event.map(onKeyPress.event, e => new StandardKeyboardEvent(e)),
|
|
362
|
+
* e.keyCode === KeyCode.Enter
|
|
363
|
+
* ).event;
|
|
364
|
+
*
|
|
365
|
+
* // Using chain
|
|
366
|
+
* const onEnterPressChain = Event.chain(onKeyPress.event, $ => $
|
|
367
|
+
* .map(e => new StandardKeyboardEvent(e))
|
|
368
|
+
* .filter(e => e.keyCode === KeyCode.Enter)
|
|
369
|
+
* );
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
function chain(event, sythensize) {
|
|
373
|
+
const fn = (listener, thisArgs, disposables) => {
|
|
374
|
+
const cs = sythensize(new ChainableSynthesis());
|
|
375
|
+
return event(function (value) {
|
|
376
|
+
const result = cs.evaluate(value);
|
|
377
|
+
if (result !== HaltChainable) {
|
|
378
|
+
listener.call(thisArgs, result);
|
|
379
|
+
}
|
|
380
|
+
}, undefined, disposables);
|
|
381
|
+
};
|
|
382
|
+
return fn;
|
|
383
|
+
}
|
|
384
|
+
Event.chain = chain;
|
|
385
|
+
const HaltChainable = Symbol('HaltChainable');
|
|
386
|
+
class ChainableSynthesis {
|
|
387
|
+
constructor() {
|
|
388
|
+
this.steps = [];
|
|
389
|
+
}
|
|
390
|
+
map(fn) {
|
|
391
|
+
this.steps.push(fn);
|
|
392
|
+
return this;
|
|
393
|
+
}
|
|
394
|
+
forEach(fn) {
|
|
395
|
+
this.steps.push(v => {
|
|
396
|
+
fn(v);
|
|
397
|
+
return v;
|
|
398
|
+
});
|
|
399
|
+
return this;
|
|
400
|
+
}
|
|
401
|
+
filter(fn) {
|
|
402
|
+
this.steps.push(v => fn(v) ? v : HaltChainable);
|
|
403
|
+
return this;
|
|
404
|
+
}
|
|
405
|
+
reduce(merge, initial) {
|
|
406
|
+
let last = initial;
|
|
407
|
+
this.steps.push(v => {
|
|
408
|
+
last = merge(last, v);
|
|
409
|
+
return last;
|
|
410
|
+
});
|
|
411
|
+
return this;
|
|
412
|
+
}
|
|
413
|
+
latch(equals = (a, b) => a === b) {
|
|
414
|
+
let firstCall = true;
|
|
415
|
+
let cache;
|
|
416
|
+
this.steps.push(value => {
|
|
417
|
+
const shouldEmit = firstCall || !equals(value, cache);
|
|
418
|
+
firstCall = false;
|
|
419
|
+
cache = value;
|
|
420
|
+
return shouldEmit ? value : HaltChainable;
|
|
421
|
+
});
|
|
422
|
+
return this;
|
|
423
|
+
}
|
|
424
|
+
evaluate(value) {
|
|
425
|
+
for (const step of this.steps) {
|
|
426
|
+
value = step(value);
|
|
427
|
+
if (value === HaltChainable) {
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return value;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Creates an {@link Event} from a node event emitter.
|
|
436
|
+
*/
|
|
437
|
+
function fromNodeEventEmitter(emitter, eventName, map = id => id) {
|
|
438
|
+
const fn = (...args) => result.fire(map(...args));
|
|
439
|
+
const onFirstListenerAdd = () => emitter.on(eventName, fn);
|
|
440
|
+
const onLastListenerRemove = () => emitter.removeListener(eventName, fn);
|
|
441
|
+
const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });
|
|
442
|
+
return result.event;
|
|
443
|
+
}
|
|
444
|
+
Event.fromNodeEventEmitter = fromNodeEventEmitter;
|
|
445
|
+
/**
|
|
446
|
+
* Creates an {@link Event} from a DOM event emitter.
|
|
447
|
+
*/
|
|
448
|
+
function fromDOMEventEmitter(emitter, eventName, map = id => id) {
|
|
449
|
+
const fn = (...args) => result.fire(map(...args));
|
|
450
|
+
const onFirstListenerAdd = () => emitter.addEventListener(eventName, fn);
|
|
451
|
+
const onLastListenerRemove = () => emitter.removeEventListener(eventName, fn);
|
|
452
|
+
const result = new Emitter({ onWillAddFirstListener: onFirstListenerAdd, onDidRemoveLastListener: onLastListenerRemove });
|
|
453
|
+
return result.event;
|
|
454
|
+
}
|
|
455
|
+
Event.fromDOMEventEmitter = fromDOMEventEmitter;
|
|
456
|
+
/**
|
|
457
|
+
* Creates a promise out of an event, using the {@link Event.once} helper.
|
|
458
|
+
*/
|
|
459
|
+
function toPromise(event, disposables) {
|
|
460
|
+
let cancelRef;
|
|
461
|
+
const promise = new Promise((resolve, reject) => {
|
|
462
|
+
const listener = once(event)(resolve, null, disposables);
|
|
463
|
+
// not resolved, matching the behavior of a normal disposal
|
|
464
|
+
cancelRef = () => listener.dispose();
|
|
465
|
+
});
|
|
466
|
+
promise.cancel = cancelRef;
|
|
467
|
+
return promise;
|
|
468
|
+
}
|
|
469
|
+
Event.toPromise = toPromise;
|
|
470
|
+
/**
|
|
471
|
+
* A convenience function for forwarding an event to another emitter which
|
|
472
|
+
* improves readability.
|
|
473
|
+
*
|
|
474
|
+
* This is similar to {@link Relay} but allows instantiating and forwarding
|
|
475
|
+
* on a single line and also allows for multiple source events.
|
|
476
|
+
* @param from The event to forward.
|
|
477
|
+
* @param to The emitter to forward the event to.
|
|
478
|
+
* @example
|
|
479
|
+
* Event.forward(event, emitter);
|
|
480
|
+
* // equivalent to
|
|
481
|
+
* event(e => emitter.fire(e));
|
|
482
|
+
* // equivalent to
|
|
483
|
+
* event(emitter.fire, emitter);
|
|
484
|
+
*/
|
|
485
|
+
function forward(from, to) {
|
|
486
|
+
return from(e => to.fire(e));
|
|
487
|
+
}
|
|
488
|
+
Event.forward = forward;
|
|
489
|
+
function runAndSubscribe(event, handler, initial) {
|
|
490
|
+
handler(initial);
|
|
491
|
+
return event(e => handler(e));
|
|
492
|
+
}
|
|
493
|
+
Event.runAndSubscribe = runAndSubscribe;
|
|
494
|
+
class EmitterObserver {
|
|
495
|
+
constructor(_observable, store) {
|
|
496
|
+
this._observable = _observable;
|
|
497
|
+
this._counter = 0;
|
|
498
|
+
this._hasChanged = false;
|
|
499
|
+
const options = {
|
|
500
|
+
onWillAddFirstListener: () => {
|
|
501
|
+
_observable.addObserver(this);
|
|
502
|
+
// Communicate to the observable that we received its current value and would like to be notified about future changes.
|
|
503
|
+
this._observable.reportChanges();
|
|
504
|
+
},
|
|
505
|
+
onDidRemoveLastListener: () => {
|
|
506
|
+
_observable.removeObserver(this);
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
this.emitter = new Emitter(options);
|
|
510
|
+
if (store) {
|
|
511
|
+
store.add(this.emitter);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
beginUpdate(_observable) {
|
|
515
|
+
// assert(_observable === this.obs);
|
|
516
|
+
this._counter++;
|
|
517
|
+
}
|
|
518
|
+
handlePossibleChange(_observable) {
|
|
519
|
+
// assert(_observable === this.obs);
|
|
520
|
+
}
|
|
521
|
+
handleChange(_observable, _change) {
|
|
522
|
+
// assert(_observable === this.obs);
|
|
523
|
+
this._hasChanged = true;
|
|
524
|
+
}
|
|
525
|
+
endUpdate(_observable) {
|
|
526
|
+
// assert(_observable === this.obs);
|
|
527
|
+
this._counter--;
|
|
528
|
+
if (this._counter === 0) {
|
|
529
|
+
this._observable.reportChanges();
|
|
530
|
+
if (this._hasChanged) {
|
|
531
|
+
this._hasChanged = false;
|
|
532
|
+
this.emitter.fire(this._observable.get());
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
538
|
+
* Creates an event emitter that is fired when the observable changes.
|
|
539
|
+
* Each listeners subscribes to the emitter.
|
|
540
|
+
*/
|
|
541
|
+
function fromObservable(obs, store) {
|
|
542
|
+
const observer = new EmitterObserver(obs, store);
|
|
543
|
+
return observer.emitter.event;
|
|
544
|
+
}
|
|
545
|
+
Event.fromObservable = fromObservable;
|
|
546
|
+
/**
|
|
547
|
+
* Each listener is attached to the observable directly.
|
|
548
|
+
*/
|
|
549
|
+
function fromObservableLight(observable) {
|
|
550
|
+
return (listener, thisArgs, disposables) => {
|
|
551
|
+
let count = 0;
|
|
552
|
+
let didChange = false;
|
|
553
|
+
const observer = {
|
|
554
|
+
beginUpdate() {
|
|
555
|
+
count++;
|
|
556
|
+
},
|
|
557
|
+
endUpdate() {
|
|
558
|
+
count--;
|
|
559
|
+
if (count === 0) {
|
|
560
|
+
observable.reportChanges();
|
|
561
|
+
if (didChange) {
|
|
562
|
+
didChange = false;
|
|
563
|
+
listener.call(thisArgs);
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
},
|
|
567
|
+
handlePossibleChange() {
|
|
568
|
+
// noop
|
|
569
|
+
},
|
|
570
|
+
handleChange() {
|
|
571
|
+
didChange = true;
|
|
572
|
+
}
|
|
573
|
+
};
|
|
574
|
+
observable.addObserver(observer);
|
|
575
|
+
observable.reportChanges();
|
|
576
|
+
const disposable = {
|
|
577
|
+
dispose() {
|
|
578
|
+
observable.removeObserver(observer);
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
if (disposables instanceof DisposableStore) {
|
|
582
|
+
disposables.add(disposable);
|
|
583
|
+
}
|
|
584
|
+
else if (Array.isArray(disposables)) {
|
|
585
|
+
disposables.push(disposable);
|
|
586
|
+
}
|
|
587
|
+
return disposable;
|
|
588
|
+
};
|
|
589
|
+
}
|
|
590
|
+
Event.fromObservableLight = fromObservableLight;
|
|
591
|
+
})(Event || (Event = {}));
|
|
592
|
+
class EventProfiling {
|
|
593
|
+
static { this.all = new Set(); }
|
|
594
|
+
static { this._idPool = 0; }
|
|
595
|
+
constructor(name) {
|
|
596
|
+
this.listenerCount = 0;
|
|
597
|
+
this.invocationCount = 0;
|
|
598
|
+
this.elapsedOverall = 0;
|
|
599
|
+
this.durations = [];
|
|
600
|
+
this.name = `${name}_${EventProfiling._idPool++}`;
|
|
601
|
+
EventProfiling.all.add(this);
|
|
602
|
+
}
|
|
603
|
+
start(listenerCount) {
|
|
604
|
+
this._stopWatch = new StopWatch();
|
|
605
|
+
this.listenerCount = listenerCount;
|
|
606
|
+
}
|
|
607
|
+
stop() {
|
|
608
|
+
if (this._stopWatch) {
|
|
609
|
+
const elapsed = this._stopWatch.elapsed();
|
|
610
|
+
this.durations.push(elapsed);
|
|
611
|
+
this.elapsedOverall += elapsed;
|
|
612
|
+
this.invocationCount += 1;
|
|
613
|
+
this._stopWatch = undefined;
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
let _globalLeakWarningThreshold = -1;
|
|
618
|
+
class LeakageMonitor {
|
|
619
|
+
static { this._idPool = 1; }
|
|
620
|
+
constructor(_errorHandler, threshold, name = (LeakageMonitor._idPool++).toString(16).padStart(3, '0')) {
|
|
621
|
+
this._errorHandler = _errorHandler;
|
|
622
|
+
this.threshold = threshold;
|
|
623
|
+
this.name = name;
|
|
624
|
+
this._warnCountdown = 0;
|
|
625
|
+
}
|
|
626
|
+
dispose() {
|
|
627
|
+
this._stacks?.clear();
|
|
628
|
+
}
|
|
629
|
+
check(stack, listenerCount) {
|
|
630
|
+
const threshold = this.threshold;
|
|
631
|
+
if (threshold <= 0 || listenerCount < threshold) {
|
|
632
|
+
return undefined;
|
|
633
|
+
}
|
|
634
|
+
if (!this._stacks) {
|
|
635
|
+
this._stacks = new Map();
|
|
636
|
+
}
|
|
637
|
+
const count = (this._stacks.get(stack.value) || 0);
|
|
638
|
+
this._stacks.set(stack.value, count + 1);
|
|
639
|
+
this._warnCountdown -= 1;
|
|
640
|
+
if (this._warnCountdown <= 0) {
|
|
641
|
+
// only warn on first exceed and then every time the limit
|
|
642
|
+
// is exceeded by 50% again
|
|
643
|
+
this._warnCountdown = threshold * 0.5;
|
|
644
|
+
const [topStack, topCount] = this.getMostFrequentStack();
|
|
645
|
+
const message = `[${this.name}] potential listener LEAK detected, having ${listenerCount} listeners already. MOST frequent listener (${topCount}):`;
|
|
646
|
+
console.warn(message);
|
|
647
|
+
console.warn(topStack);
|
|
648
|
+
const error = new ListenerLeakError(message, topStack);
|
|
649
|
+
this._errorHandler(error);
|
|
650
|
+
}
|
|
651
|
+
return () => {
|
|
652
|
+
const count = (this._stacks.get(stack.value) || 0);
|
|
653
|
+
this._stacks.set(stack.value, count - 1);
|
|
654
|
+
};
|
|
655
|
+
}
|
|
656
|
+
getMostFrequentStack() {
|
|
657
|
+
if (!this._stacks) {
|
|
658
|
+
return undefined;
|
|
659
|
+
}
|
|
660
|
+
let topStack;
|
|
661
|
+
let topCount = 0;
|
|
662
|
+
for (const [stack, count] of this._stacks) {
|
|
663
|
+
if (!topStack || topCount < count) {
|
|
664
|
+
topStack = [stack, count];
|
|
665
|
+
topCount = count;
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
return topStack;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
class Stacktrace {
|
|
672
|
+
static create() {
|
|
673
|
+
const err = new Error();
|
|
674
|
+
return new Stacktrace(err.stack ?? '');
|
|
675
|
+
}
|
|
676
|
+
constructor(value) {
|
|
677
|
+
this.value = value;
|
|
678
|
+
}
|
|
679
|
+
print() {
|
|
680
|
+
console.warn(this.value.split('\n').slice(2).join('\n'));
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
// error that is logged when going over the configured listener threshold
|
|
684
|
+
class ListenerLeakError extends Error {
|
|
685
|
+
constructor(message, stack) {
|
|
686
|
+
super(message);
|
|
687
|
+
this.name = 'ListenerLeakError';
|
|
688
|
+
this.stack = stack;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
// SEVERE error that is logged when having gone way over the configured listener
|
|
692
|
+
// threshold so that the emitter refuses to accept more listeners
|
|
693
|
+
class ListenerRefusalError extends Error {
|
|
694
|
+
constructor(message, stack) {
|
|
695
|
+
super(message);
|
|
696
|
+
this.name = 'ListenerRefusalError';
|
|
697
|
+
this.stack = stack;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
class UniqueContainer {
|
|
701
|
+
constructor(value) {
|
|
702
|
+
this.value = value;
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
const compactionThreshold = 2;
|
|
706
|
+
/**
|
|
707
|
+
* The Emitter can be used to expose an Event to the public
|
|
708
|
+
* to fire it from the insides.
|
|
709
|
+
* Sample:
|
|
710
|
+
class Document {
|
|
711
|
+
|
|
712
|
+
private readonly _onDidChange = new Emitter<(value:string)=>any>();
|
|
713
|
+
|
|
714
|
+
public onDidChange = this._onDidChange.event;
|
|
715
|
+
|
|
716
|
+
// getter-style
|
|
717
|
+
// get onDidChange(): Event<(value:string)=>any> {
|
|
718
|
+
// return this._onDidChange.event;
|
|
719
|
+
// }
|
|
720
|
+
|
|
721
|
+
private _doIt() {
|
|
722
|
+
//...
|
|
723
|
+
this._onDidChange.fire(value);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
*/
|
|
727
|
+
class Emitter {
|
|
728
|
+
constructor(options) {
|
|
729
|
+
this._size = 0;
|
|
730
|
+
this._options = options;
|
|
731
|
+
this._leakageMon = (this._options?.leakWarningThreshold)
|
|
732
|
+
? new LeakageMonitor(options?.onListenerError ?? onUnexpectedError, this._options?.leakWarningThreshold ?? _globalLeakWarningThreshold) :
|
|
733
|
+
undefined;
|
|
734
|
+
this._perfMon = this._options?._profName ? new EventProfiling(this._options._profName) : undefined;
|
|
735
|
+
this._deliveryQueue = this._options?.deliveryQueue;
|
|
736
|
+
}
|
|
737
|
+
dispose() {
|
|
738
|
+
if (!this._disposed) {
|
|
739
|
+
this._disposed = true;
|
|
740
|
+
// It is bad to have listeners at the time of disposing an emitter, it is worst to have listeners keep the emitter
|
|
741
|
+
// alive via the reference that's embedded in their disposables. Therefore we loop over all remaining listeners and
|
|
742
|
+
// unset their subscriptions/disposables. Looping and blaming remaining listeners is done on next tick because the
|
|
743
|
+
// the following programming pattern is very popular:
|
|
744
|
+
//
|
|
745
|
+
// const someModel = this._disposables.add(new ModelObject()); // (1) create and register model
|
|
746
|
+
// this._disposables.add(someModel.onDidChange(() => { ... }); // (2) subscribe and register model-event listener
|
|
747
|
+
// ...later...
|
|
748
|
+
// this._disposables.dispose(); disposes (1) then (2): don't warn after (1) but after the "overall dispose" is done
|
|
749
|
+
if (this._deliveryQueue?.current === this) {
|
|
750
|
+
this._deliveryQueue.reset();
|
|
751
|
+
}
|
|
752
|
+
if (this._listeners) {
|
|
753
|
+
this._listeners = undefined;
|
|
754
|
+
this._size = 0;
|
|
755
|
+
}
|
|
756
|
+
this._options?.onDidRemoveLastListener?.();
|
|
757
|
+
this._leakageMon?.dispose();
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
/**
|
|
761
|
+
* For the public to allow to subscribe
|
|
762
|
+
* to events from this Emitter
|
|
763
|
+
*/
|
|
764
|
+
get event() {
|
|
765
|
+
this._event ??= (callback, thisArgs, disposables) => {
|
|
766
|
+
if (this._leakageMon && this._size > this._leakageMon.threshold ** 2) {
|
|
767
|
+
const message = `[${this._leakageMon.name}] REFUSES to accept new listeners because it exceeded its threshold by far (${this._size} vs ${this._leakageMon.threshold})`;
|
|
768
|
+
console.warn(message);
|
|
769
|
+
const tuple = this._leakageMon.getMostFrequentStack() ?? ['UNKNOWN stack', -1];
|
|
770
|
+
const error = new ListenerRefusalError(`${message}. HINT: Stack shows most frequent listener (${tuple[1]}-times)`, tuple[0]);
|
|
771
|
+
const errorHandler = this._options?.onListenerError || onUnexpectedError;
|
|
772
|
+
errorHandler(error);
|
|
773
|
+
return Disposable.None;
|
|
774
|
+
}
|
|
775
|
+
if (this._disposed) {
|
|
776
|
+
// todo: should we warn if a listener is added to a disposed emitter? This happens often
|
|
777
|
+
return Disposable.None;
|
|
778
|
+
}
|
|
779
|
+
if (thisArgs) {
|
|
780
|
+
callback = callback.bind(thisArgs);
|
|
781
|
+
}
|
|
782
|
+
const contained = new UniqueContainer(callback);
|
|
783
|
+
let removeMonitor;
|
|
784
|
+
if (this._leakageMon && this._size >= Math.ceil(this._leakageMon.threshold * 0.2)) {
|
|
785
|
+
// check and record this emitter for potential leakage
|
|
786
|
+
contained.stack = Stacktrace.create();
|
|
787
|
+
removeMonitor = this._leakageMon.check(contained.stack, this._size + 1);
|
|
788
|
+
}
|
|
789
|
+
if (!this._listeners) {
|
|
790
|
+
this._options?.onWillAddFirstListener?.(this);
|
|
791
|
+
this._listeners = contained;
|
|
792
|
+
this._options?.onDidAddFirstListener?.(this);
|
|
793
|
+
}
|
|
794
|
+
else if (this._listeners instanceof UniqueContainer) {
|
|
795
|
+
this._deliveryQueue ??= new EventDeliveryQueuePrivate();
|
|
796
|
+
this._listeners = [this._listeners, contained];
|
|
797
|
+
}
|
|
798
|
+
else {
|
|
799
|
+
this._listeners.push(contained);
|
|
800
|
+
}
|
|
801
|
+
this._options?.onDidAddListener?.(this);
|
|
802
|
+
this._size++;
|
|
803
|
+
const result = toDisposable(() => {
|
|
804
|
+
removeMonitor?.();
|
|
805
|
+
this._removeListener(contained);
|
|
806
|
+
});
|
|
807
|
+
if (disposables instanceof DisposableStore) {
|
|
808
|
+
disposables.add(result);
|
|
809
|
+
}
|
|
810
|
+
else if (Array.isArray(disposables)) {
|
|
811
|
+
disposables.push(result);
|
|
812
|
+
}
|
|
813
|
+
return result;
|
|
814
|
+
};
|
|
815
|
+
return this._event;
|
|
816
|
+
}
|
|
817
|
+
_removeListener(listener) {
|
|
818
|
+
this._options?.onWillRemoveListener?.(this);
|
|
819
|
+
if (!this._listeners) {
|
|
820
|
+
return; // expected if a listener gets disposed
|
|
821
|
+
}
|
|
822
|
+
if (this._size === 1) {
|
|
823
|
+
this._listeners = undefined;
|
|
824
|
+
this._options?.onDidRemoveLastListener?.(this);
|
|
825
|
+
this._size = 0;
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
// size > 1 which requires that listeners be a list:
|
|
829
|
+
const listeners = this._listeners;
|
|
830
|
+
const index = listeners.indexOf(listener);
|
|
831
|
+
if (index === -1) {
|
|
832
|
+
console.log('disposed?', this._disposed);
|
|
833
|
+
console.log('size?', this._size);
|
|
834
|
+
console.log('arr?', JSON.stringify(this._listeners));
|
|
835
|
+
throw new Error('Attempted to dispose unknown listener');
|
|
836
|
+
}
|
|
837
|
+
this._size--;
|
|
838
|
+
listeners[index] = undefined;
|
|
839
|
+
const adjustDeliveryQueue = this._deliveryQueue.current === this;
|
|
840
|
+
if (this._size * compactionThreshold <= listeners.length) {
|
|
841
|
+
let n = 0;
|
|
842
|
+
for (let i = 0; i < listeners.length; i++) {
|
|
843
|
+
if (listeners[i]) {
|
|
844
|
+
listeners[n++] = listeners[i];
|
|
845
|
+
}
|
|
846
|
+
else if (adjustDeliveryQueue && n < this._deliveryQueue.end) {
|
|
847
|
+
this._deliveryQueue.end--;
|
|
848
|
+
if (n < this._deliveryQueue.i) {
|
|
849
|
+
this._deliveryQueue.i--;
|
|
850
|
+
}
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
listeners.length = n;
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
_deliver(listener, value) {
|
|
857
|
+
if (!listener) {
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
const errorHandler = this._options?.onListenerError || onUnexpectedError;
|
|
861
|
+
if (!errorHandler) {
|
|
862
|
+
listener.value(value);
|
|
863
|
+
return;
|
|
864
|
+
}
|
|
865
|
+
try {
|
|
866
|
+
listener.value(value);
|
|
867
|
+
}
|
|
868
|
+
catch (e) {
|
|
869
|
+
errorHandler(e);
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
/** Delivers items in the queue. Assumes the queue is ready to go. */
|
|
873
|
+
_deliverQueue(dq) {
|
|
874
|
+
const listeners = dq.current._listeners;
|
|
875
|
+
while (dq.i < dq.end) {
|
|
876
|
+
// important: dq.i is incremented before calling deliver() because it might reenter deliverQueue()
|
|
877
|
+
this._deliver(listeners[dq.i++], dq.value);
|
|
878
|
+
}
|
|
879
|
+
dq.reset();
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* To be kept private to fire an event to
|
|
883
|
+
* subscribers
|
|
884
|
+
*/
|
|
885
|
+
fire(event) {
|
|
886
|
+
if (this._deliveryQueue?.current) {
|
|
887
|
+
this._deliverQueue(this._deliveryQueue);
|
|
888
|
+
this._perfMon?.stop(); // last fire() will have starting perfmon, stop it before starting the next dispatch
|
|
889
|
+
}
|
|
890
|
+
this._perfMon?.start(this._size);
|
|
891
|
+
if (!this._listeners) ;
|
|
892
|
+
else if (this._listeners instanceof UniqueContainer) {
|
|
893
|
+
this._deliver(this._listeners, event);
|
|
894
|
+
}
|
|
895
|
+
else {
|
|
896
|
+
const dq = this._deliveryQueue;
|
|
897
|
+
dq.enqueue(this, event, this._listeners.length);
|
|
898
|
+
this._deliverQueue(dq);
|
|
899
|
+
}
|
|
900
|
+
this._perfMon?.stop();
|
|
901
|
+
}
|
|
902
|
+
hasListeners() {
|
|
903
|
+
return this._size > 0;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
const createEventDeliveryQueue = () => new EventDeliveryQueuePrivate();
|
|
907
|
+
class EventDeliveryQueuePrivate {
|
|
908
|
+
constructor() {
|
|
909
|
+
/**
|
|
910
|
+
* Index in current's listener list.
|
|
911
|
+
*/
|
|
912
|
+
this.i = -1;
|
|
913
|
+
/**
|
|
914
|
+
* The last index in the listener's list to deliver.
|
|
915
|
+
*/
|
|
916
|
+
this.end = 0;
|
|
917
|
+
}
|
|
918
|
+
enqueue(emitter, value, end) {
|
|
919
|
+
this.i = 0;
|
|
920
|
+
this.end = end;
|
|
921
|
+
this.current = emitter;
|
|
922
|
+
this.value = value;
|
|
923
|
+
}
|
|
924
|
+
reset() {
|
|
925
|
+
this.i = this.end; // force any current emission loop to stop, mainly for during dispose
|
|
926
|
+
this.current = undefined;
|
|
927
|
+
this.value = undefined;
|
|
928
|
+
}
|
|
929
|
+
}
|
|
930
|
+
class PauseableEmitter extends Emitter {
|
|
931
|
+
constructor(options) {
|
|
932
|
+
super(options);
|
|
933
|
+
this._isPaused = 0;
|
|
934
|
+
this._eventQueue = new LinkedList();
|
|
935
|
+
this._mergeFn = options?.merge;
|
|
936
|
+
}
|
|
937
|
+
pause() {
|
|
938
|
+
this._isPaused++;
|
|
939
|
+
}
|
|
940
|
+
resume() {
|
|
941
|
+
if (this._isPaused !== 0 && --this._isPaused === 0) {
|
|
942
|
+
if (this._mergeFn) {
|
|
943
|
+
// use the merge function to create a single composite
|
|
944
|
+
// event. make a copy in case firing pauses this emitter
|
|
945
|
+
if (this._eventQueue.size > 0) {
|
|
946
|
+
const events = Array.from(this._eventQueue);
|
|
947
|
+
this._eventQueue.clear();
|
|
948
|
+
super.fire(this._mergeFn(events));
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
else {
|
|
952
|
+
// no merging, fire each event individually and test
|
|
953
|
+
// that this emitter isn't paused halfway through
|
|
954
|
+
while (!this._isPaused && this._eventQueue.size !== 0) {
|
|
955
|
+
super.fire(this._eventQueue.shift());
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
fire(event) {
|
|
961
|
+
if (this._size) {
|
|
962
|
+
if (this._isPaused !== 0) {
|
|
963
|
+
this._eventQueue.push(event);
|
|
964
|
+
}
|
|
965
|
+
else {
|
|
966
|
+
super.fire(event);
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
class DebounceEmitter extends PauseableEmitter {
|
|
972
|
+
constructor(options) {
|
|
973
|
+
super(options);
|
|
974
|
+
this._delay = options.delay ?? 100;
|
|
975
|
+
}
|
|
976
|
+
fire(event) {
|
|
977
|
+
if (!this._handle) {
|
|
978
|
+
this.pause();
|
|
979
|
+
this._handle = setTimeout(() => {
|
|
980
|
+
this._handle = undefined;
|
|
981
|
+
this.resume();
|
|
982
|
+
}, this._delay);
|
|
983
|
+
}
|
|
984
|
+
super.fire(event);
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
/**
|
|
988
|
+
* An emitter which queue all events and then process them at the
|
|
989
|
+
* end of the event loop.
|
|
990
|
+
*/
|
|
991
|
+
class MicrotaskEmitter extends Emitter {
|
|
992
|
+
constructor(options) {
|
|
993
|
+
super(options);
|
|
994
|
+
this._queuedEvents = [];
|
|
995
|
+
this._mergeFn = options?.merge;
|
|
996
|
+
}
|
|
997
|
+
fire(event) {
|
|
998
|
+
if (!this.hasListeners()) {
|
|
999
|
+
return;
|
|
1000
|
+
}
|
|
1001
|
+
this._queuedEvents.push(event);
|
|
1002
|
+
if (this._queuedEvents.length === 1) {
|
|
1003
|
+
queueMicrotask(() => {
|
|
1004
|
+
if (this._mergeFn) {
|
|
1005
|
+
super.fire(this._mergeFn(this._queuedEvents));
|
|
1006
|
+
}
|
|
1007
|
+
else {
|
|
1008
|
+
this._queuedEvents.forEach(e => super.fire(e));
|
|
1009
|
+
}
|
|
1010
|
+
this._queuedEvents = [];
|
|
1011
|
+
});
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
/**
|
|
1016
|
+
* An event emitter that multiplexes many events into a single event.
|
|
1017
|
+
*
|
|
1018
|
+
* @example Listen to the `onData` event of all `Thing`s, dynamically adding and removing `Thing`s
|
|
1019
|
+
* to the multiplexer as needed.
|
|
1020
|
+
*
|
|
1021
|
+
* ```typescript
|
|
1022
|
+
* const anythingDataMultiplexer = new EventMultiplexer<{ data: string }>();
|
|
1023
|
+
*
|
|
1024
|
+
* const thingListeners = DisposableMap<Thing, IDisposable>();
|
|
1025
|
+
*
|
|
1026
|
+
* thingService.onDidAddThing(thing => {
|
|
1027
|
+
* thingListeners.set(thing, anythingDataMultiplexer.add(thing.onData);
|
|
1028
|
+
* });
|
|
1029
|
+
* thingService.onDidRemoveThing(thing => {
|
|
1030
|
+
* thingListeners.deleteAndDispose(thing);
|
|
1031
|
+
* });
|
|
1032
|
+
*
|
|
1033
|
+
* anythingDataMultiplexer.event(e => {
|
|
1034
|
+
* console.log('Something fired data ' + e.data)
|
|
1035
|
+
* });
|
|
1036
|
+
* ```
|
|
1037
|
+
*/
|
|
1038
|
+
class EventMultiplexer {
|
|
1039
|
+
constructor() {
|
|
1040
|
+
this.hasListeners = false;
|
|
1041
|
+
this.events = [];
|
|
1042
|
+
this.emitter = new Emitter({
|
|
1043
|
+
onWillAddFirstListener: () => this.onFirstListenerAdd(),
|
|
1044
|
+
onDidRemoveLastListener: () => this.onLastListenerRemove()
|
|
1045
|
+
});
|
|
1046
|
+
}
|
|
1047
|
+
get event() {
|
|
1048
|
+
return this.emitter.event;
|
|
1049
|
+
}
|
|
1050
|
+
add(event) {
|
|
1051
|
+
const e = { event: event, listener: null };
|
|
1052
|
+
this.events.push(e);
|
|
1053
|
+
if (this.hasListeners) {
|
|
1054
|
+
this.hook(e);
|
|
1055
|
+
}
|
|
1056
|
+
const dispose = () => {
|
|
1057
|
+
if (this.hasListeners) {
|
|
1058
|
+
this.unhook(e);
|
|
1059
|
+
}
|
|
1060
|
+
const idx = this.events.indexOf(e);
|
|
1061
|
+
this.events.splice(idx, 1);
|
|
1062
|
+
};
|
|
1063
|
+
return toDisposable(createSingleCallFunction(dispose));
|
|
1064
|
+
}
|
|
1065
|
+
onFirstListenerAdd() {
|
|
1066
|
+
this.hasListeners = true;
|
|
1067
|
+
this.events.forEach(e => this.hook(e));
|
|
1068
|
+
}
|
|
1069
|
+
onLastListenerRemove() {
|
|
1070
|
+
this.hasListeners = false;
|
|
1071
|
+
this.events.forEach(e => this.unhook(e));
|
|
1072
|
+
}
|
|
1073
|
+
hook(e) {
|
|
1074
|
+
e.listener = e.event(r => this.emitter.fire(r));
|
|
1075
|
+
}
|
|
1076
|
+
unhook(e) {
|
|
1077
|
+
e.listener?.dispose();
|
|
1078
|
+
e.listener = null;
|
|
1079
|
+
}
|
|
1080
|
+
dispose() {
|
|
1081
|
+
this.emitter.dispose();
|
|
1082
|
+
for (const e of this.events) {
|
|
1083
|
+
e.listener?.dispose();
|
|
1084
|
+
}
|
|
1085
|
+
this.events = [];
|
|
1086
|
+
}
|
|
1087
|
+
}
|
|
1088
|
+
/**
|
|
1089
|
+
* The EventBufferer is useful in situations in which you want
|
|
1090
|
+
* to delay firing your events during some code.
|
|
1091
|
+
* You can wrap that code and be sure that the event will not
|
|
1092
|
+
* be fired during that wrap.
|
|
1093
|
+
*
|
|
1094
|
+
* ```
|
|
1095
|
+
* const emitter: Emitter;
|
|
1096
|
+
* const delayer = new EventDelayer();
|
|
1097
|
+
* const delayedEvent = delayer.wrapEvent(emitter.event);
|
|
1098
|
+
*
|
|
1099
|
+
* delayedEvent(console.log);
|
|
1100
|
+
*
|
|
1101
|
+
* delayer.bufferEvents(() => {
|
|
1102
|
+
* emitter.fire(); // event will not be fired yet
|
|
1103
|
+
* });
|
|
1104
|
+
*
|
|
1105
|
+
* // event will only be fired at this point
|
|
1106
|
+
* ```
|
|
1107
|
+
*/
|
|
1108
|
+
class EventBufferer {
|
|
1109
|
+
constructor() {
|
|
1110
|
+
this.data = [];
|
|
1111
|
+
}
|
|
1112
|
+
wrapEvent(event, reduce, initial) {
|
|
1113
|
+
return (listener, thisArgs, disposables) => {
|
|
1114
|
+
return event(i => {
|
|
1115
|
+
const data = this.data[this.data.length - 1];
|
|
1116
|
+
// Non-reduce scenario
|
|
1117
|
+
if (!reduce) {
|
|
1118
|
+
// Buffering case
|
|
1119
|
+
if (data) {
|
|
1120
|
+
data.buffers.push(() => listener.call(thisArgs, i));
|
|
1121
|
+
}
|
|
1122
|
+
else {
|
|
1123
|
+
// Not buffering case
|
|
1124
|
+
listener.call(thisArgs, i);
|
|
1125
|
+
}
|
|
1126
|
+
return;
|
|
1127
|
+
}
|
|
1128
|
+
// Reduce scenario
|
|
1129
|
+
const reduceData = data;
|
|
1130
|
+
// Not buffering case
|
|
1131
|
+
if (!reduceData) {
|
|
1132
|
+
// TODO: Is there a way to cache this reduce call for all listeners?
|
|
1133
|
+
listener.call(thisArgs, reduce(initial, i));
|
|
1134
|
+
return;
|
|
1135
|
+
}
|
|
1136
|
+
// Buffering case
|
|
1137
|
+
reduceData.items ??= [];
|
|
1138
|
+
reduceData.items.push(i);
|
|
1139
|
+
if (reduceData.buffers.length === 0) {
|
|
1140
|
+
// Include a single buffered function that will reduce all events when we're done buffering events
|
|
1141
|
+
data.buffers.push(() => {
|
|
1142
|
+
// cache the reduced result so that the value can be shared across all listeners
|
|
1143
|
+
reduceData.reducedResult ??= initial
|
|
1144
|
+
? reduceData.items.reduce(reduce, initial)
|
|
1145
|
+
: reduceData.items.reduce(reduce);
|
|
1146
|
+
listener.call(thisArgs, reduceData.reducedResult);
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
}, undefined, disposables);
|
|
1150
|
+
};
|
|
1151
|
+
}
|
|
1152
|
+
bufferEvents(fn) {
|
|
1153
|
+
const data = { buffers: new Array() };
|
|
1154
|
+
this.data.push(data);
|
|
1155
|
+
const r = fn();
|
|
1156
|
+
this.data.pop();
|
|
1157
|
+
data.buffers.forEach(flush => flush());
|
|
1158
|
+
return r;
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
/**
|
|
1162
|
+
* A Relay is an event forwarder which functions as a replugabble event pipe.
|
|
1163
|
+
* Once created, you can connect an input event to it and it will simply forward
|
|
1164
|
+
* events from that input event through its own `event` property. The `input`
|
|
1165
|
+
* can be changed at any point in time.
|
|
1166
|
+
*/
|
|
1167
|
+
class Relay {
|
|
1168
|
+
constructor() {
|
|
1169
|
+
this.listening = false;
|
|
1170
|
+
this.inputEvent = Event.None;
|
|
1171
|
+
this.inputEventListener = Disposable.None;
|
|
1172
|
+
this.emitter = new Emitter({
|
|
1173
|
+
onDidAddFirstListener: () => {
|
|
1174
|
+
this.listening = true;
|
|
1175
|
+
this.inputEventListener = this.inputEvent(this.emitter.fire, this.emitter);
|
|
1176
|
+
},
|
|
1177
|
+
onDidRemoveLastListener: () => {
|
|
1178
|
+
this.listening = false;
|
|
1179
|
+
this.inputEventListener.dispose();
|
|
1180
|
+
}
|
|
1181
|
+
});
|
|
1182
|
+
this.event = this.emitter.event;
|
|
1183
|
+
}
|
|
1184
|
+
set input(event) {
|
|
1185
|
+
this.inputEvent = event;
|
|
1186
|
+
if (this.listening) {
|
|
1187
|
+
this.inputEventListener.dispose();
|
|
1188
|
+
this.inputEventListener = event(this.emitter.fire, this.emitter);
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
dispose() {
|
|
1192
|
+
this.inputEventListener.dispose();
|
|
1193
|
+
this.emitter.dispose();
|
|
1194
|
+
}
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
export { DebounceEmitter, Emitter, Event, EventBufferer, EventMultiplexer, EventProfiling, ListenerLeakError, ListenerRefusalError, MicrotaskEmitter, PauseableEmitter, Relay, createEventDeliveryQueue };
|