@lvce-editor/server 0.4.1 → 0.4.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/ThirdPartyNotices.txt +2 -2
- package/package.json +2 -2
- package/static/{b10f46d → db64c60}/config/builtinCommands.json +0 -0
- package/static/{b10f46d → db64c60}/config/colorTheme.json +0 -0
- package/static/{b10f46d → db64c60}/config/defaultKeyBindings.json +1 -1
- package/static/{b10f46d → db64c60}/config/defaultSettings.json +0 -0
- package/static/{b10f46d → db64c60}/css/App.css +12 -12
- package/static/{b10f46d → db64c60}/fonts/FiraCode-VariableFont.ttf +0 -0
- package/static/{b10f46d → db64c60}/icons/arrow-right.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/check.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/chevron-right.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/debug-alt-2.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/ellipsis.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/extensionDefaultIcon.png +0 -0
- package/static/{b10f46d → db64c60}/icons/extensions.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/files.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/icon-close.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/icon-source-control.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/icon-sync.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/icon.png +0 -0
- package/static/{b10f46d → db64c60}/icons/language-icon.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/pwa-icon-192.png +0 -0
- package/static/{b10f46d → db64c60}/icons/pwa-icon-512.png +0 -0
- package/static/{b10f46d → db64c60}/icons/search.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/settings-gear.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/source-control.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-array.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-boolean.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-class.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-color.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-constant.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-enum-member.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-enum.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-event.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-field.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-file.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-interface.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-key.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-keyword.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-method.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-misc.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-namespace.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-numeric.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-operator.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-parameter.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-property.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-ruler.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-snippet.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-string.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-structure.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/symbol-variable.svg +0 -0
- package/static/{b10f46d → db64c60}/icons/theme-icon.png +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/dist/rendererProcessMain.js +1 -1
- package/static/{b10f46d → db64c60}/packages/renderer-process/dist/rendererProcessMain.js.map +1 -1
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ActivityBarItemFlags/ActvityBarItemFlags.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/AriaAlert/AriaAlert.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Assert/Assert.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Audio/Audio.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Audio/Audio.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/BackDrop/BackDrop.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Callback/Callback.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ClipBoard/ClipBoard.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ClipBoard/ClipBoard.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Command/Command.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Context/Context.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Css/Css.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Css/Css.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Developer/Developer.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Developer/Developer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Dialog/Dialog.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Dialog/Dialog.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/DirentType/DirentType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Download/Download.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Download/Download.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/Editor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/EditorHelper.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerCursor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerDecoration2.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerDiagnostics.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerLineNumbers.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerMarker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerScreenReader.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerScrollBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerSelections.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Editor/LayerText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorError/EditorError.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorError/EditorError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorGroup/EditorGroup.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorHover/EditorHover.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorHover/EditorHover.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorRename/EditorRename.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorRename/EditorRename.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/EditorTab/EditorTab.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Errors/JsonRpcError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/FindWidget/FindWidget.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/FindWidget/FindWidget.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Focus/Focus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ImagePreview/ImagePreview.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ImagePreview/ImagePreview.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/InitData/InitData.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/InitData/InitData.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/InputBox/InputBox.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/InputEventType/InputEventType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/IpcClient/IpcClient.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/IpcParent/IpcParent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/IpcParent/IpcParentWithMessagePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/IpcParent/IpcParentWithModuleWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/IpcParent/IpcParentWithReferencePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/KeyBindings/KeyBindings.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/KeyBindings/KeyBindings.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Layout/Layout.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Layout/Layout.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Location/Location.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Location/Location.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/MenuItem/MenuItem.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/MenuItemFlags/MenuItemFlags.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Meta/Meta.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Meta/Meta.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ModifierKey/ModifierKey.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Module/Module.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ModuleId/ModuleId.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ModuleMap/ModuleMap.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/MouseEventType/MouseEventType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Notification/Notification.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Notification/Notification.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/OldMenu/Menu.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/OldMenu/Menu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/OldMenu/Menu2.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Open/Open.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Open/Open.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Platform/Platform.js +2 -2
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/PlatformType/PlatformType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/Renderer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/RendererExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/RendererQuickPick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/RendererSearchResult.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/RendererSuggestWidget.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Renderer/RendererTree.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/RendererWorker/RendererWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ServiceWorker/ServiceWorker.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ServiceWorker/ServiceWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Terminal/Terminal.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Terminal/Terminal.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/ConditionErrors.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/ElementActions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/HtmlElements.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/KeyBoardActions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/MultiElementConditions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/QuerySelector.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/SingleElementConditions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/TestFrameWork.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TestFrameWork/TestFrameWork.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TitleBarMenuBar/TitleBarMenuBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/TitleBarMenuBar/TitleBarMenuBarEvents.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/VError/VError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/ExplorerModel.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeProviderJson.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeProviderNpm.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeView.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeView2.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeViewClass.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/TreeViewNumber.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/Viewlet.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/Viewlet.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Viewlet/ViewletList.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletActivityBar/ViewletActivityBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletActivityBar/ViewletActivityBarEvents.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletClock/ViewletClock.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletController/ViewletProblems.controller.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletDebugConsole/ViewletDebugConsole.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletEditorCompletion/ViewletEditorCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletEditorImage/ViewletEditorImage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletEditorPlainText/ViewletEditorPlainText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletEditorText/ViewletEditorText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletEmpty/ViewletEmpty.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletExplorer/ViewletExplorer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletExplorer/ViewletExplorerEvents.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletExtensions/ViewletExtensions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletExtensions/ViewletExtensionsEvents.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletIframe/ViewletIframe.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletImplementations/ViewletImplementations.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletLocations/ViewletLocations.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletMain/ViewletMain.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletModule/ViewletModule.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletModuleId/ViewletModuleId.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletOutput/ViewletOutput.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletPanel/ViewletPanel.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletProblems/ViewletProblems.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletQuickPick/ViewletQuickPick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletReferences/ViewletReferences.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletRunAndDebug/ViewletRunAndDebug.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletSearch/ViewletSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletSideBar/ViewletSideBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletSourceControl/ViewletSourceControl.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletStatusBar/ViewletStatusBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletTerminal/ViewletTerminal.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/ViewletTitleBar/ViewletTitleBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/WebStorage/WebStorage.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/WebStorage/WebStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/WebStorageType/WebStorageType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/WheelEventType/WheelEventType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Widget/Widget.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/WidgetManager/WidgetManager.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Window/Window.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/parts/Window/Window.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/rendererProcessMain.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-process/src/shared/findIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/dist/rendererWorkerMain.js +19 -9
- package/static/db64c60/packages/renderer-worker/dist/rendererWorkerMain.js.map +7 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ActivityBarItemFlags/ActvityBarItemFlags.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Ajax/Ajax.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Ajax/Ajax.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Arrays/Arrays.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Assert/Assert.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Audio/Audio.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Audio/Audio.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Base64/Base64.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Base64/Base64.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Blob/Blob.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Blob/Blob.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/CacheStorage/CacheStorage.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/CacheStorage/CacheStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Callback/Callback.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Callback/Callback.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ClipBoard/ClipBoard.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ClipBoard/ClipBoard.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorPicker/ColorPicker.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorPicker/ColorPicker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorTheme/Color.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorTheme/ColorTheme.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorTheme/ColorTheme.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorThemeFromJson/ColorThemeFromJson.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ColorThemeFromJson/ColorThemeFromJson.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Command/Command.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Compare/Compare.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ContentTracing/ContentTracing.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ContentTracing/ContentTracing.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Context/ContextImpl.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ContextMenu/ContextMenu.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ContextMenu/ContextMenu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Css/Css.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/CustomEditor/CustomEditor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/CustomEditor/CustomEditorExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/DefaultIcon/DefaultIcon.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Developer/Developer.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Developer/Developer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Dialog/Dialog.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Dialog/Dialog.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/DirentType/DirentType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Download/Download.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Download/Download.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Editor/Editor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Editor/EditorCursor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Editor/EditorScrolling.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Editor/EditorSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Editor/EditorText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandApplyEdit.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandBlur.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandBraceCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCancelSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandComposition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCopy.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCopyLineDown.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCopyLineUp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorCharacterLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorCharacterRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorDown.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorEnd.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorHome.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorHorizontalLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorHorizontalRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorSet.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorUp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorVertical.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorWordLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorWordPartLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorWordPartRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCursorWordRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandCut.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteAllLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteAllRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteCharacterLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteCharacterRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteHorizontal.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteHorizontalLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteHorizontalRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteWordLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteWordPartLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteWordPartRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDeleteWordRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandDelta.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandFormat.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGetPositionLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGetPositionRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGetSelectionFromNativeRange.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGetWordAt.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGoTo.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGoToDefinition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandGoToTypeDefinition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleContextMenu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleDoubleClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleMouseMove.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleMouseMoveWithAltKey.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleNativeBeforeInputFromContentEditable.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleNativeSelectionChange.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleScrollBarClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleScrollBarMove.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleSingleClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleTab.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleTouchEnd.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleTouchMove.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleTouchStart.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleTripleClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandHandleWheel.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandIndent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandIndentLess.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandIndentMore.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandIndentSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandInsertLineBreak.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveLineDown.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveLineUp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveRectangleSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveRectangleSelectionPx.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandMoveSelectionPx.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandPaste.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandPasteText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandPosition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandReplaceRange.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandReplaceSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSave.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectAll.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectAllLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectAllOccurrences.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectAllRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectCharacterLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectCharacterRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectDown.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectHorizontalLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectHorizontalRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectInsideString.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectLine.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectNextOccurrence.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectPreviousOccurrence.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectUp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectWord.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectWordLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelectWordRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSetDecorations.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSetDeltaY.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSetLanguageId.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandShowMessage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSnippet.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandSortLinesAscending.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandTabCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandToggleBlockComment.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandToggleComment.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandToggleLineComment.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandUndo.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorCommandUnindent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCommand/EditorIndent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorCompletionType/EditorCompletionType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorDiagnostics/EditorDiagnostics.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorDiagnostics/EditorDiagnostics.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorError/EditorError.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorError/EditorError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorRename/EditorRename.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorRename/EditorRename.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/EditorSelection/EditorSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronApp/ElectronApp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronContentTracing/ElectronContentTracing.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronDialog/ElectronDialog.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronNetLog/ElectronNetLog.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronPowerSaveBlocker/ElectronPowerSaveBlocker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronProcess/ElectronProcess.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronSafeStorage/ElectronSafeStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronShell/ElectronShell.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronWindow/ElectronWindow.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronWindowAbout/ElectronWindowAbout.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ElectronWindowProcessExplorer/ElectronWindowProcessExplorer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ErrorHandling/ErrorHandling.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ErrorHandling/ErrorHandling.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Errors/CancelationError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Errors/Errors.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostBraceCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostClosingTagCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostCommands.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostCore.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostCore.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostDefinition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostDiagnostic.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostFileSystem.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostFormatting.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostHover.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostImplementation.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostLanguages.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostOutput.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostQuickPick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostReference.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostRename.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostSemanticTokens.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostShared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostSourceControl.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostStatusBarItems.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostTabCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostTextDocument.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostTextSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/ExtensionHostTypeDefinition.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHost/shared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithElectron.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithMessagePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithModuleWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithReferencePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithSharedProcess.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWebSocket.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostManagement/ExtensionHostManagement.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostManagement/ExtensionHostManagementBrowser.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostManagement/ExtensionHostManagementElectron.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostManagement/ExtensionHostManagementNode.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionHostManagement/ExtensionHostManagementShared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionManagement/ExtensionManagement.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionManifestStatus/ExtensionManifestStatus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionMarketplace/ExtensionMarketplace.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionMeta/ExtensionMeta.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionMeta/ExtensionMeta.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Extensions/Extensions.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Extensions/Extensions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ExtensionsSomething/ExtensionsSomething.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystem.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystem.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemApp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppMemoryUsage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppRecentlyOpened.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppSession.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppSettings.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppShared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemAppStartupPerformance.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemData.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemDisk.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemGitHub.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemMemory.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FileSystem/FileSystemWeb.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FindWidget/FindWidget.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FindWidget/FindWidget.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Focus/Focus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Format/Format.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Format/Format.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FuzzySearch/FuzzySearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/FuzzySearch/FuzzySearchMrAleph.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/GitHubRestApi/GitHubRestApi.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/GlobalEventBus/GlobalEventBus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Highlight/Highlight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/History/History.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/I18NString/I18NString.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IconTheme/IconTheme.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IconTheme/IconTheme.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Id/Id.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ImagePreview/ImagePreview.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ImagePreview/ImagePreview.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IndexedDb/IndexedDb.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/InitData/InitData.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/InputEventType/InputEventType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcChild/IpcChild.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcChild/IpcChildWithMessagePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcChild/IpcChildWithModuleWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcChild/IpcChildWithReferencePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParentWithElectron.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParentWithMessagePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParentWithModuleWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParentWithReferencePort.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/IpcParent/IpcParentWithWebSocket.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Json/Json.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/JsonRpc/JsonRpc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/KeyBindings/KeyBindings.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/KeyBindings/KeyBindings.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/KeyBindingsInitial/KeyBindingsInitial.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/KeyBindingsInitial/KeyBindingsInitial.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/LanguageFeatures/LanguageFeatures.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Languages/Languages.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Layout/Layout.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Layout/Layout.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/LazyCommand/LazyCommand.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/LifeCycle/LifeCycle.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/List/List.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Listener/Listener.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Listener/Listener.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/LocalStorage/LocalStorage.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/LocalStorage/LocalStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Location/Location.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/Main.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainCloseActiveEditor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainCloseAllEditors.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainCloseEditorsToTheLeft.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainCloseEditorsToTheRight.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainFocusFirst.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainFocusIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainFocusLast.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainFocusNext.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Main/MainFocusPrevious.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Menu/Menu.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Menu/Menu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuCore/MenuCore.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntries.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesActivityBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesActivityBarAdditionalViews.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesEdit.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesEditor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesExplorer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesExplorerFile.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesExplorerFolder.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesFile.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesGo.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesHelp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesManageExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesOpenRecent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesRun.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesSelection.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesSettings.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesTab.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesTerminal.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesTitleBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuEntries/MenuEntriesView.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/MenuItemFlags/MenuItemFlags.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Meta/Meta.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ModifierKey/ModifierKey.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Module/Module.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ModuleId/ModuleId.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ModuleMap/ModuleMap.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Navigation/Navigation.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Navigation/Navigation.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/NestedError/NestedError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Notification/Notification.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Notification/Notification.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Open/Open.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Open/Open.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/OpenNativeFolder/OpenNativeFolder.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/OpenNativeFolder/OpenNativeFolder.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Performance/Performance.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Platform/Platform.js +2 -2
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/PlatformType/PlatformType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Preferences/Preferences.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Preferences/Preferences.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickColorTheme.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickCommand.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickEverything.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickFile.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickGoToLine.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickNoop.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickNumber.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickOpenRecent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickSymbol.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickView.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/QuickPick/QuickPickWorkspaceSymbol.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/RecentlyOpened/RecentlyOpened.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/RecentlyOpened/RecentlyOpened.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/RendererProcess/RendererProcess.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SafeTokenizeLine/SafeTokenizeLine.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SaveState/SaveState.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SaveState/SaveState.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SearchFile/SearchFile.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SearchResultType/SearchResultType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ServiceWorker/ServiceWorker.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ServiceWorker/ServiceWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SessionReplay/SessionReplay.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SessionReplay/SessionReplay.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SessionStorage/SessionStorage.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SessionStorage/SessionStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SharedProcess/SharedProcess.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SourceControl/SourceControl.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SourceControl/SourceControl.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Storage/Storage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/SyntaxHighlightingWorker/SyntaxHighlightingWorker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Test/Test.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Test/Test.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWork/Locator.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWork/TestFrameWork.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentCommand.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentContextMenu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentEditor.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentExplorer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentFileSystem.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentKeyBoard.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentMain.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentPlatform.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentQuickPick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentSettings.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentSideBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TestFrameWorkComponent/TestFrameWorkComponentWorkspace.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TextDocument/TextDocument.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TextSearch/TextSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TextSearch/TextSearchExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TextSearch/TextSearchNode.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TextSegmenter/TextSegmenter.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Timers/Timers.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Timestamp/Timestamp.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TitleBarMenuBar/TitleBarMenuBar.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/TitleBarMenuBar/TitleBarMenuBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Tokenizer/TokenizePlainText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Tokenizer/Tokenizer.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/VError/VError.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Viewlet/Viewlet.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Viewlet/Viewlet.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Viewlet/ViewletExtension.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Viewlet/ViewletExtensionsHeader.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Viewlet/ViewletExtensionsList.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBar.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocusFirst.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocusIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocusLast.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocusNext.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarFocusPrevious.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarHandleClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletActivityBar/ViewletActivityBarSelectCurrent.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletClock/ViewletClock.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletClock/ViewletClock.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletContextMenu/ViewletContextMenu.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletCounter/ViewletCounter.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletDebugConsole/ViewletDebugConsole.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletDebugConsole/ViewletDebugConsole.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorCompletion/ViewletEditorCompletion.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorCompletion/ViewletEditorCompletion.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorImage/ViewletEditorImage.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorImage/ViewletEditorImage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorPlainText/ViewletEditorPlainText.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorPlainText/ViewletEditorPlainText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorText/ViewletEditorText.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEditorText/ViewletEditorText.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletEmpty/ViewletEmpty.js +0 -0
- package/static/db64c60/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorer.ipc.js +68 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorer.js +13 -4
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerExpandRecursively.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocus.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusFirst.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusLast.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusNext.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusNone.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerFocusPrevious.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleContextMenuKeyboard.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleContextMenuMouseAt.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleDragOver.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleDrop.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleDropIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerHandleDropRoot.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorerShared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensions.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensions.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusFirst.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusLast.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusNext.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusNextPage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusPrevious.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsFocusPreviousPage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsHandleClick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletExtensions/ViewletExtensionsShared.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletIframe/ViewletIframe.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletImplementations/ViewletImplementations.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletImplementations/ViewletImplementations.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletList/ViewletList.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletList/ViewletList.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletLocations/ViewletLocations.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletLocations/ViewletLocations.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletMain/ViewletMain.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletMain/ViewletMain.js +3 -3
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletManager/ViewletManager.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletModule/ViewletModule.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletModuleId/ViewletModuleId.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletNoop/ViewletNoop.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletNoop/ViewletNoop.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletOutput/ViewletOutput.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletOutput/ViewletOutput.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletPanel/ViewletPanel.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletPanel/ViewletPanel.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletProblems/ViewletProblems.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletProblems/ViewletProblems.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPick.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPick.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPickFocusFirst.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPickFocusIndex.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPickFocusLast.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPickFocusNext.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/ViewletQuickPickFocusPrevious.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletQuickPick/quickpickRender.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletReferences/ViewletReferences.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletReferences/ViewletReferences.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletRunAndDebug/ViewletRunAndDebug.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletRunAndDebug/ViewletRunAndDebug.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSearch/ViewletSearch.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSearch/ViewletSearch.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSideBar/ViewletSideBar.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSideBar/ViewletSideBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSourceControl/ViewletSourceControl.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletSourceControl/ViewletSourceControl.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletStates/ViewletStates.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletStatusBar/ViewletStatusBar.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletStatusBar/ViewletStatusBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletTerminal/ViewletTerminal.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletTerminal/ViewletTerminal.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletTitleBar/ViewletTitleBar.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletTitleBar/ViewletTitleBar.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/ViewletTodoList/ViewletTodoList.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/WebSocket/WebSocket.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/WebSocket/WebSocketNew.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/WebStorage/WebStorage.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/WebStorageType/WebStorageType.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Window/Window.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Window/Window.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Workbench/Workbench.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Workbench/Workbench.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Worker/Worker.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Workspace/Workspace.ipc.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/parts/Workspace/Workspace.js +0 -0
- package/static/{b10f46d → db64c60}/packages/renderer-worker/src/rendererWorkerMain.js +0 -0
- package/static/{b10f46d → db64c60}/sounds/bell.oga +0 -0
- package/static/{b10f46d → db64c60}/static/js/ansi-styles.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/babel-code-frame.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/babel-helper-validator-identifier.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/babel-highlight.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/blob-util.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/chalk.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/color-convert.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/color-name.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/escape-string-regexp.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/idb/async-iterators.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/idb/index.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/idb/with-async-ittr.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/idb/wrap-idb-value.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/js-base64.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/js-tokens.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/ky.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/p-min-delay.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/pretty-bytes.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/supports-color.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/termterm.js +0 -0
- package/static/{b10f46d → db64c60}/static/js/yoctodelay.js +0 -0
- package/static/index.html +7 -7
- package/static/manifest.json +2 -2
- package/static/serviceWorker.js +1 -1
- package/static/b10f46d/packages/renderer-worker/dist/rendererWorkerMain.js.map +0 -7
- package/static/b10f46d/packages/renderer-worker/src/parts/ViewletExplorer/ViewletExplorer.ipc.js +0 -67
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/parts/ModuleId/ModuleId.js", "../static/js/ky.js", "../src/parts/VError/VError.js", "../src/parts/Ajax/Ajax.js", "../src/parts/Ajax/Ajax.ipc.js", "../src/parts/Assert/Assert.js", "../src/parts/Callback/Callback.js", "../src/parts/Errors/Errors.js", "../src/parts/IpcChild/IpcChildWithMessagePort.js", "../src/parts/IpcChild/IpcChildWithModuleWorker.js", "../src/parts/IpcChild/IpcChildWithReferencePort.js", "../src/parts/IpcChild/IpcChild.js", "../src/parts/RendererProcess/RendererProcess.js", "../src/parts/Audio/Audio.js", "../src/parts/Audio/Audio.ipc.js", "../static/js/js-base64.js", "../src/parts/Base64/Base64.js", "../src/parts/Base64/Base64.ipc.js", "../static/js/blob-util.js", "../src/parts/Blob/Blob.js", "../src/parts/Blob/Blob.ipc.js", "../src/parts/JsonRpc/JsonRpc.js", "../src/parts/IpcParent/IpcParentWithElectron.js", "../src/parts/IpcParent/IpcParentWithMessagePort.js", "../src/parts/IpcParent/IpcParentWithModuleWorker.js", "../src/parts/IpcParent/IpcParentWithReferencePort.js", "../src/parts/IpcParent/IpcParentWithWebSocket.js", "../src/parts/IpcParent/IpcParent.js", "../src/parts/SharedProcess/SharedProcess.js", "../src/parts/PlatformType/PlatformType.js", "../src/parts/Platform/Platform.js", "../src/parts/CacheStorage/CacheStorage.js", "../src/parts/CacheStorage/CacheStorage.ipc.js", "../src/parts/Callback/Callback.ipc.js", "../src/parts/ClipBoard/ClipBoard.js", "../src/parts/ClipBoard/ClipBoard.ipc.js", "../src/parts/ColorPicker/ColorPicker.js", "../src/parts/ColorPicker/ColorPicker.ipc.js", "../src/parts/ColorTheme/ColorTheme.ipc.js", "../src/parts/ColorThemeFromJson/ColorThemeFromJson.js", "../src/parts/ColorThemeFromJson/ColorThemeFromJson.ipc.js", "../src/parts/ElectronProcess/ElectronProcess.js", "../src/parts/ElectronContentTracing/ElectronContentTracing.js", "../src/parts/ElectronShell/ElectronShell.js", "../src/parts/OpenNativeFolder/OpenNativeFolder.js", "../src/parts/ContentTracing/ContentTracing.js", "../src/parts/ContentTracing/ContentTracing.ipc.js", "../src/parts/GlobalEventBus/GlobalEventBus.js", "../src/parts/Errors/CancelationError.js", "../src/parts/ViewletStates/ViewletStates.js", "../src/parts/ViewletModuleId/ViewletModuleId.js", "../src/parts/DirentType/DirentType.js", "../src/parts/ErrorHandling/ErrorHandling.js", "../src/parts/ExtensionHost/ExtensionHostLanguages.js", "../src/parts/Languages/Languages.js", "../src/parts/ExtensionManifestStatus/ExtensionManifestStatus.js", "../src/parts/ExtensionMeta/ExtensionMeta.js", "../src/parts/Arrays/Arrays.js", "../src/parts/TextDocument/TextDocument.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithSharedProcess.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithModuleWorker.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithWebSocket.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithReferencePort.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithMessagePort.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpcWithElectron.js", "../src/parts/ExtensionHostIpc/ExtensionHostIpc.js", "../src/parts/ExtensionHostManagement/ExtensionHostManagementBrowser.js", "../src/parts/ExtensionHostManagement/ExtensionHostManagementNode.js", "../src/parts/ExtensionHostManagement/ExtensionHostManagementShared.js", "../src/parts/ExtensionHostManagement/ExtensionHostManagementElectron.js", "../src/parts/Location/Location.js", "../src/parts/ElectronApp/ElectronApp.js", "../src/parts/ElectronWindow/ElectronWindow.js", "../src/parts/Window/Window.js", "../src/parts/Workspace/Workspace.js", "../src/parts/ExtensionHostManagement/ExtensionHostManagement.js", "../src/parts/ExtensionHost/ExtensionHostShared.js", "../src/parts/ExtensionHost/ExtensionHostFileSystem.js", "../src/parts/FileSystem/FileSystemAppStartupPerformance.js", "../src/parts/FileSystem/FileSystemAppMemoryUsage.js", "../src/parts/Json/Json.js", "../src/parts/WebStorage/WebStorage.js", "../src/parts/WebStorageType/WebStorageType.js", "../src/parts/LocalStorage/LocalStorage.js", "../src/parts/FileSystem/FileSystemDisk.js", "../src/parts/FileSystem/FileSystemAppShared.js", "../src/parts/FileSystem/FileSystemAppSettings.js", "../src/parts/FileSystem/FileSystemAppRecentlyOpened.js", "../static/js/idb/wrap-idb-value.js", "../static/js/idb/index.js", "../static/js/idb/async-iterators.js", "../static/js/idb/with-async-ittr.js", "../src/parts/IndexedDb/IndexedDb.js", "../src/parts/Timestamp/Timestamp.js", "../src/parts/SessionReplay/SessionReplay.js", "../src/parts/FileSystem/FileSystemAppSession.js", "../src/parts/FileSystem/FileSystemApp.js", "../src/parts/GitHubRestApi/GitHubRestApi.js", "../src/parts/FileSystem/FileSystemGitHub.js", "../src/parts/FileSystem/FileSystemWeb.js", "../src/parts/FileSystem/FileSystemData.js", "../src/parts/FileSystem/FileSystemMemory.js", "../src/parts/FileSystem/FileSystem.js", "../src/parts/Preferences/Preferences.js", "../src/parts/DefaultIcon/DefaultIcon.js", "../src/parts/IconTheme/IconTheme.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusIndex.js", "../src/parts/Compare/Compare.js", "../src/parts/ViewletExplorer/ViewletExplorerShared.js", "../src/parts/ViewletExplorer/ViewletExplorer.js", "../src/parts/LazyCommand/LazyCommand.js", "../src/parts/ViewletExplorer/ViewletExplorerExpandRecursively.js", "../src/parts/ViewletExplorer/ViewletExplorerFocus.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusFirst.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusLast.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusNext.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusNone.js", "../src/parts/ViewletExplorer/ViewletExplorerFocusPrevious.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleContextMenuKeyboard.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleContextMenuMouseAt.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleDragOver.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleDropRoot.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleDropIndex.js", "../src/parts/ViewletExplorer/ViewletExplorerHandleDrop.js", "../src/parts/ViewletExplorer/ViewletExplorer.ipc.js", "../src/parts/ViewletRunAndDebug/ViewletRunAndDebug.js", "../src/parts/ViewletRunAndDebug/ViewletRunAndDebug.ipc.js", "../src/parts/I18NString/I18NString.js", "../src/parts/TextSearch/TextSearchNode.js", "../src/parts/ExtensionHost/ExtensionHostTextSearch.js", "../src/parts/TextSearch/TextSearchExtension.js", "../src/parts/TextSearch/TextSearch.js", "../src/parts/SearchResultType/SearchResultType.js", "../src/parts/ViewletSearch/ViewletSearch.js", "../src/parts/ViewletSearch/ViewletSearch.ipc.js", "../src/parts/ExtensionHost/ExtensionHostSourceControl.js", "../src/parts/ViewletSourceControl/ViewletSourceControl.js", "../src/parts/ViewletSourceControl/ViewletSourceControl.ipc.js", "../src/parts/Id/Id.js", "../src/parts/ViewletTerminal/ViewletTerminal.js", "../src/parts/ViewletTerminal/ViewletTerminal.ipc.js", "../src/parts/ViewletDebugConsole/ViewletDebugConsole.js", "../src/parts/ViewletDebugConsole/ViewletDebugConsole.ipc.js", "../src/parts/ExtensionManagement/ExtensionManagement.js", "../src/parts/ExtensionMarketplace/ExtensionMarketplace.js", "../src/parts/ViewletExtensions/ViewletExtensionsShared.js", "../src/parts/ViewletExtensions/ViewletExtensions.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusIndex.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusFirst.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusLast.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusNext.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusNextPage.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusPrevious.js", "../src/parts/ViewletExtensions/ViewletExtensionsFocusPreviousPage.js", "../src/parts/ViewletExtensions/ViewletExtensionsHandleClick.js", "../src/parts/ViewletExtensions/ViewletExtensions.ipc.js", "../src/parts/ExtensionHost/ExtensionHostCore.js", "../src/parts/ExtensionHost/ExtensionHostOutput.js", "../src/parts/FindWidget/FindWidget.js", "../src/parts/ViewletOutput/ViewletOutput.js", "../src/parts/ViewletOutput/ViewletOutput.ipc.js", "../src/parts/ExtensionHost/ExtensionHostDiagnostic.js", "../src/parts/ViewletProblems/ViewletProblems.js", "../src/parts/ViewletProblems/ViewletProblems.ipc.js", "../src/parts/ViewletNoop/ViewletNoop.js", "../src/parts/ViewletNoop/ViewletNoop.ipc.js", "../src/parts/Tokenizer/TokenizePlainText.js", "../src/parts/Tokenizer/Tokenizer.js", "../src/parts/Editor/EditorCursor.js", "../src/parts/Editor/EditorScrolling.js", "../src/parts/EditorSelection/EditorSelection.js", "../src/parts/Editor/EditorSelection.js", "../src/parts/SafeTokenizeLine/SafeTokenizeLine.js", "../src/parts/Editor/EditorText.js", "../src/parts/Editor/Editor.js", "../src/parts/ExtensionHost/ExtensionHostSemanticTokens.js", "../src/parts/ViewletEditorText/ViewletEditorText.js", "../src/parts/EditorCommand/EditorCommandApplyEdit.js", "../src/parts/EditorCommand/EditorCommandBlur.js", "../src/parts/ExtensionHost/ExtensionHostBraceCompletion.js", "../src/parts/EditorCommand/EditorCommandReplaceSelection.js", "../src/parts/ExtensionHost/ExtensionHostTabCompletion.js", "../src/parts/EditorCommand/EditorCommandPosition.js", "../src/parts/EditorCommand/EditorCommandShowMessage.js", "../src/parts/EditorCommand/EditorCommandBraceCompletion.js", "../src/parts/EditorCommand/EditorCommandCancelSelection.js", "../src/parts/EditorCommand/EditorCommandHandleContextMenu.js", "../src/parts/EditorCommand/EditorCommandCopyLineDown.js", "../src/parts/EditorCommand/EditorCommandCopyLineUp.js", "../src/parts/EditorCommand/EditorCommandGetPositionLeft.js", "../src/parts/EditorCommand/EditorCommandCursorHorizontalLeft.js", "../src/parts/TextSegmenter/TextSegmenter.js", "../src/parts/EditorCommand/EditorCommandDelta.js", "../src/parts/EditorCommand/EditorCommandCursorCharacterLeft.js", "../src/parts/EditorCommand/EditorCommandGetPositionRight.js", "../src/parts/EditorCommand/EditorCommandCursorHorizontalRight.js", "../src/parts/EditorCommand/EditorCommandCursorCharacterRight.js", "../src/parts/EditorCommand/EditorCommandCursorDown.js", "../src/parts/EditorCommand/EditorCommandCursorEnd.js", "../src/parts/EditorCommand/EditorCommandCursorHome.js", "../src/parts/EditorCommand/EditorCommandCursorSet.js", "../src/parts/EditorCommand/EditorCommandCursorVertical.js", "../src/parts/EditorCommand/EditorCommandCursorUp.js", "../src/parts/EditorCommand/EditorCommandCursorWordLeft.js", "../src/parts/EditorCommand/EditorCommandCursorWordPartLeft.js", "../src/parts/EditorCommand/EditorCommandCursorWordPartRight.js", "../src/parts/EditorCommand/EditorCommandCursorWordRight.js", "../src/parts/EditorCommand/EditorCommandCut.js", "../src/parts/EditorCommand/EditorCommandDeleteHorizontalLeft.js", "../src/parts/EditorCommand/EditorCommandDeleteAllLeft.js", "../src/parts/EditorCommand/EditorCommandDeleteHorizontalRight.js", "../src/parts/EditorCommand/EditorCommandDeleteAllRight.js", "../src/parts/EditorCommand/EditorCommandDeleteCharacterLeft.js", "../src/parts/EditorCommand/EditorCommandDeleteCharacterRight.js", "../src/parts/EditorCommand/EditorCommandDeleteWordLeft.js", "../src/parts/EditorCommand/EditorCommandDeleteWordPartLeft.js", "../src/parts/EditorCommand/EditorCommandDeleteWordPartRight.js", "../src/parts/EditorCommand/EditorCommandDeleteWordRight.js", "../src/parts/FuzzySearch/FuzzySearchMrAleph.js", "../src/parts/FuzzySearch/FuzzySearch.js", "../src/parts/EditorCommand/EditorCommandCompletion.js", "../src/parts/EditorCommand/EditorCommandComposition.js", "../src/parts/EditorCommand/EditorCommandCopy.js", "../src/parts/EditorCommand/EditorCommandFormat.js", "../src/parts/ExtensionHost/ExtensionHostDefinition.js", "../src/parts/EditorCommand/EditorCommandGetWordAt.js", "../src/parts/EditorCommand/EditorCommandGoTo.js", "../src/parts/EditorCommand/EditorCommandGoToDefinition.js", "../src/parts/ExtensionHost/ExtensionHostTypeDefinition.js", "../src/parts/EditorCommand/EditorCommandGoToTypeDefinition.js", "../src/parts/EditorCommand/EditorCommandGetSelectionFromNativeRange.js", "../src/parts/EditorCommand/EditorCommandHandleNativeBeforeInputFromContentEditable.js", "../src/parts/EditorCommand/EditorCommandSelectWord.js", "../src/parts/EditorCommand/EditorCommandHandleDoubleClick.js", "../src/parts/ExtensionHost/ExtensionHostHover.js", "../src/parts/EditorCommand/EditorCommandHandleMouseMove.js", "../src/parts/EditorCommand/EditorCommandHandleMouseMoveWithAltKey.js", "../src/parts/EditorCommand/EditorCommandHandleNativeSelectionChange.js", "../src/parts/EditorCommand/EditorCommandHandleScrollBarClick.js", "../src/parts/EditorCommand/EditorCommandHandleScrollBarMove.js", "../src/parts/ModifierKey/ModifierKey.js", "../src/parts/EditorCommand/EditorCommandMoveSelection.js", "../src/parts/EditorCommand/EditorCommandHandleSingleClick.js", "../src/parts/EditorCommand/EditorCommandSnippet.js", "../src/parts/EditorCommand/EditorCommandTabCompletion.js", "../src/parts/ExtensionHost/ExtensionHostClosingTagCompletion.js", "../src/parts/EditorCommand/EditorCommandType.js", "../src/parts/EditorCommand/EditorCommandIndentMore.js", "../src/parts/EditorCommand/EditorCommandHandleTab.js", "../src/parts/EditorCommand/EditorCommandHandleTouchStart.js", "../src/parts/EditorCommand/EditorCommandHandleTouchEnd.js", "../src/parts/EditorCommand/EditorCommandSetDeltaY.js", "../src/parts/EditorCommand/EditorCommandHandleTouchMove.js", "../src/parts/EditorCommand/EditorCommandSelectLine.js", "../src/parts/EditorCommand/EditorCommandHandleTripleClick.js", "../src/parts/EditorCommand/EditorCommandIndentLess.js", "../src/parts/EditorCommand/EditorCommandInsertLineBreak.js", "../src/parts/EditorCommand/EditorCommandMoveLineDown.js", "../src/parts/EditorCommand/EditorCommandMoveLineUp.js", "../src/parts/EditorCommand/EditorCommandMoveRectangleSelection.js", "../src/parts/EditorCommand/EditorCommandMoveRectangleSelectionPx.js", "../src/parts/EditorCommand/EditorCommandMoveSelectionPx.js", "../src/parts/EditorCommand/EditorCommandPasteText.js", "../src/parts/EditorCommand/EditorCommandPaste.js", "../src/parts/EditorCommand/EditorCommandSave.js", "../src/parts/EditorCommand/EditorCommandSelectAll.js", "../src/parts/EditorCommand/EditorCommandSelectAllOccurrences.js", "../src/parts/EditorCommand/EditorCommandSelectHorizontalLeft.js", "../src/parts/EditorCommand/EditorCommandSelectCharacterLeft.js", "../src/parts/EditorCommand/EditorCommandSelectHorizontalRight.js", "../src/parts/EditorCommand/EditorCommandSelectCharacterRight.js", "../src/parts/EditorCommand/EditorCommandSelectDown.js", "../src/parts/EditorCommand/EditorCommandSelectInsideString.js", "../src/parts/EditorCommand/EditorCommandSelectNextOccurrence.js", "../src/parts/EditorCommand/EditorCommandSelectUp.js", "../src/parts/EditorCommand/EditorCommandSelectWordLeft.js", "../src/parts/EditorCommand/EditorCommandSelectWordRight.js", "../src/parts/EditorCommand/EditorCommandSetDecorations.js", "../src/parts/EditorCommand/EditorCommandSetLanguageId.js", "../src/parts/EditorCommand/EditorCommandSortLinesAscending.js", "../src/parts/EditorCommand/EditorCommandToggleBlockComment.js", "../src/parts/EditorCommand/EditorCommandToggleLineComment.js", "../src/parts/EditorCommand/EditorCommandToggleComment.js", "../src/parts/EditorCommand/EditorCommandUndo.js", "../src/parts/EditorCommand/EditorCommandUnindent.js", "../src/parts/ViewletEditorText/ViewletEditorText.ipc.js", "../src/parts/ViewletEditorPlainText/ViewletEditorPlainText.js", "../src/parts/ViewletEditorPlainText/ViewletEditorPlainText.ipc.js", "../src/parts/ViewletEditorImage/ViewletEditorImage.js", "../src/parts/ViewletEditorImage/ViewletEditorImage.ipc.js", "../src/parts/ViewletClock/ViewletClock.js", "../src/parts/ViewletClock/ViewletClock.ipc.js", "../src/parts/ActivityBarItemFlags/ActvityBarItemFlags.js", "../src/parts/ViewletActivityBar/ViewletActivityBar.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocusIndex.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocus.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocusFirst.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocusLast.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocusNext.js", "../src/parts/ViewletActivityBar/ViewletActivityBarFocusPrevious.js", "../src/parts/ViewletActivityBar/ViewletActivityBarHandleClick.js", "../src/parts/ViewletActivityBar/ViewletActivityBarSelectCurrent.js", "../src/parts/ViewletActivityBar/ViewletActivityBar.ipc.js", "../src/parts/ViewletPanel/ViewletPanel.js", "../src/parts/ViewletPanel/ViewletPanel.ipc.js", "../src/parts/LifeCycle/LifeCycle.js", "../src/parts/ViewletSideBar/ViewletSideBar.js", "../src/parts/ViewletSideBar/ViewletSideBar.ipc.js", "../src/parts/MenuItemFlags/MenuItemFlags.js", "../src/parts/MenuEntries/MenuEntriesActivityBar.js", "../src/parts/MenuEntries/MenuEntriesEdit.js", "../src/parts/MenuEntries/MenuEntriesEditor.js", "../src/parts/MenuEntries/MenuEntriesExplorer.js", "../src/parts/MenuEntries/MenuEntriesFile.js", "../src/parts/MenuEntries/MenuEntriesGo.js", "../src/parts/MenuEntries/MenuEntriesHelp.js", "../src/parts/MenuEntries/MenuEntriesManageExtension.js", "../src/parts/MenuEntries/MenuEntriesOpenRecent.js", "../src/parts/MenuEntries/MenuEntriesRun.js", "../src/parts/MenuEntries/MenuEntriesSelection.js", "../src/parts/MenuEntries/MenuEntriesSettings.js", "../src/parts/MenuEntries/MenuEntriesTab.js", "../src/parts/MenuEntries/MenuEntriesTerminal.js", "../src/parts/MenuEntries/MenuEntriesTitleBar.js", "../src/parts/MenuEntries/MenuEntriesView.js", "../src/parts/MenuEntries/MenuEntriesActivityBarAdditionalViews.js", "../src/parts/MenuEntries/MenuEntriesSearch.js", "../src/parts/MenuEntries/MenuEntries.js", "../src/parts/TitleBarMenuBar/TitleBarMenuBar.js", "../src/parts/ViewletTitleBar/ViewletTitleBar.js", "../src/parts/ViewletTitleBar/ViewletTitleBar.ipc.js", "../src/parts/Listener/Listener.js", "../src/parts/ExtensionHost/ExtensionHostStatusBarItems.js", "../src/parts/ViewletStatusBar/ViewletStatusBar.js", "../src/parts/ViewletStatusBar/ViewletStatusBar.ipc.js", "../src/parts/ViewletMain/ViewletMain.js", "../src/parts/ViewletMain/ViewletMain.ipc.js", "../src/parts/ExtensionHost/ExtensionHostCompletion.js", "../src/parts/EditorCompletionType/EditorCompletionType.js", "../src/parts/ViewletEditorCompletion/ViewletEditorCompletion.js", "../src/parts/ViewletEditorCompletion/ViewletEditorCompletion.ipc.js", "../src/parts/ExtensionHost/ExtensionHostReference.js", "../src/parts/ViewletLocations/ViewletLocations.js", "../src/parts/ViewletReferences/ViewletReferences.js", "../src/parts/ViewletReferences/ViewletReferences.ipc.js", "../src/parts/ExtensionHost/ExtensionHostImplementation.js", "../src/parts/ViewletImplementations/ViewletImplementations.js", "../src/parts/ViewletImplementations/ViewletImplementations.ipc.js", "../src/parts/QuickPick/QuickPickNoop.js", "../src/parts/ExtensionHost/ExtensionHostCommands.js", "../src/parts/QuickPick/QuickPickCommand.js", "../src/parts/QuickPick/QuickPickSymbol.js", "../src/parts/QuickPick/QuickPickWorkspaceSymbol.js", "../src/parts/QuickPick/QuickPickGoToLine.js", "../src/parts/QuickPick/QuickPickView.js", "../src/parts/SearchFile/SearchFile.js", "../src/parts/QuickPick/QuickPickFile.js", "../src/parts/QuickPick/QuickPickEverything.js", "../src/parts/InputEventType/InputEventType.js", "../src/parts/QuickPick/QuickPickNumber.js", "../src/parts/QuickPick/QuickPickOpenRecent.js", "../src/parts/QuickPick/QuickPickColorTheme.js", "../src/parts/ViewletQuickPick/ViewletQuickPick.js", "../src/parts/ViewletQuickPick/ViewletQuickPickFocusIndex.js", "../src/parts/ViewletQuickPick/ViewletQuickPickFocusFirst.js", "../src/parts/ViewletQuickPick/ViewletQuickPickFocusLast.js", "../src/parts/ViewletQuickPick/ViewletQuickPickFocusNext.js", "../src/parts/ViewletQuickPick/ViewletQuickPickFocusPrevious.js", "../src/parts/ViewletQuickPick/ViewletQuickPick.ipc.js", "../src/parts/ViewletModule/ViewletModule.js", "../src/parts/ViewletManager/ViewletManager.js", "../src/parts/Viewlet/Viewlet.js", "../src/parts/Layout/Layout.js", "../src/parts/Menu/Menu.js", "../src/parts/ContextMenu/ContextMenu.js", "../src/parts/ContextMenu/ContextMenu.ipc.js", "../static/js/pretty-bytes.js", "../src/parts/ElectronWindowProcessExplorer/ElectronWindowProcessExplorer.js", "../src/parts/Developer/Developer.js", "../src/parts/Developer/Developer.ipc.js", "../src/parts/ElectronDialog/ElectronDialog.js", "../src/parts/ElectronWindowAbout/ElectronWindowAbout.js", "../src/parts/Dialog/Dialog.js", "../src/parts/Dialog/Dialog.ipc.js", "../src/parts/Download/Download.js", "../src/parts/Download/Download.ipc.js", "../src/parts/EditorDiagnostics/EditorDiagnostics.js", "../src/parts/EditorDiagnostics/EditorDiagnostics.ipc.js", "../src/parts/EditorError/EditorError.js", "../src/parts/EditorError/EditorError.ipc.js", "../src/parts/ExtensionHost/ExtensionHostRename.js", "../src/parts/EditorRename/EditorRename.js", "../src/parts/EditorRename/EditorRename.ipc.js", "../src/parts/ErrorHandling/ErrorHandling.ipc.js", "../src/parts/ExtensionHost/ExtensionHostCore.ipc.js", "../src/parts/ExtensionMeta/ExtensionMeta.ipc.js", "../src/parts/Extensions/Extensions.js", "../src/parts/Extensions/Extensions.ipc.js", "../src/parts/FileSystem/FileSystem.ipc.js", "../src/parts/FindWidget/FindWidget.ipc.js", "../src/parts/Format/Format.js", "../src/parts/Format/Format.ipc.js", "../src/parts/IconTheme/IconTheme.ipc.js", "../src/parts/ImagePreview/ImagePreview.js", "../src/parts/ImagePreview/ImagePreview.ipc.js", "../src/parts/KeyBindings/KeyBindings.js", "../src/parts/KeyBindings/KeyBindings.ipc.js", "../src/parts/KeyBindingsInitial/KeyBindingsInitial.js", "../src/parts/KeyBindingsInitial/KeyBindingsInitial.ipc.js", "../src/parts/Layout/Layout.ipc.js", "../src/parts/Listener/Listener.ipc.js", "../src/parts/LocalStorage/LocalStorage.ipc.js", "../src/parts/Menu/Menu.ipc.js", "../src/parts/Navigation/Navigation.js", "../src/parts/Navigation/Navigation.ipc.js", "../src/parts/Notification/Notification.js", "../src/parts/Notification/Notification.ipc.js", "../src/parts/Open/Open.js", "../src/parts/Open/Open.ipc.js", "../src/parts/OpenNativeFolder/OpenNativeFolder.ipc.js", "../src/parts/Preferences/Preferences.ipc.js", "../src/parts/RecentlyOpened/RecentlyOpened.js", "../src/parts/RecentlyOpened/RecentlyOpened.ipc.js", "../src/parts/SessionStorage/SessionStorage.js", "../src/parts/SaveState/SaveState.js", "../src/parts/SaveState/SaveState.ipc.js", "../src/parts/ServiceWorker/ServiceWorker.js", "../src/parts/ServiceWorker/ServiceWorker.ipc.js", "../src/parts/SessionReplay/SessionReplay.ipc.js", "../src/parts/SessionStorage/SessionStorage.ipc.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentContextMenu.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentEditor.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentExplorer.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentExtension.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentFileSystem.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentMain.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentWorkspace.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentKeyBoard.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentQuickPick.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentSearch.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentSideBar.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentCommand.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentPlatform.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponentSettings.js", "../src/parts/TestFrameWorkComponent/TestFrameWorkComponent.js", "../src/parts/TestFrameWork/Locator.js", "../src/parts/TestFrameWork/TestFrameWork.js", "../src/parts/Test/Test.js", "../src/parts/Test/Test.ipc.js", "../src/parts/TitleBarMenuBar/TitleBarMenuBar.ipc.js", "../src/parts/Viewlet/Viewlet.ipc.js", "../src/parts/Window/Window.ipc.js", "../src/parts/Workbench/Workbench.ipc.js", "../src/parts/Workspace/Workspace.ipc.js", "../src/parts/Module/Module.js", "../src/parts/ModuleMap/ModuleMap.js", "../src/parts/Command/Command.js", "../src/parts/Css/Css.js", "../src/parts/Meta/Meta.js", "../src/parts/ColorTheme/ColorTheme.js", "../src/parts/Performance/Performance.js", "../src/parts/InitData/InitData.js", "../src/parts/Workbench/Workbench.js", "../src/rendererWorkerMain.js"],
|
|
4
|
+
"sourcesContent": ["// TODO rename to widgetFind and group together with other widgets (contextMenu, hover, tooltip)\nexport const Ajax = 1\nexport const Audio = 2\nexport const Base64 = 3\nexport const Blob = 4\nexport const CacheStorage = 5\nexport const Callback = 6\nexport const ClipBoard = 7\nexport const ColorPicker = 8\nexport const ColorTheme = 9\nexport const ColorThemeFromJson = 10\nexport const CommandInfo = 11\nexport const ContextMenu = 12\nexport const Developer = 13\nexport const Dialog = 14\nexport const Download = 15\nexport const EditorDiagnostics = 16\nexport const EditorError = 17\nexport const EditorRename = 18\nexport const ErrorHandling = 19\nexport const ExtensionHostCode = 20\nexport const ExtensionMeta = 21\nexport const Extensions = 22\nexport const FileSystem = 23\nexport const FindInWorkspace = 24\nexport const FindWidget = 25\nexport const Format = 26\nexport const IconTheme = 27\nexport const ImagePreview = 28\nexport const KeyBindings = 29\nexport const KeyBindingsInitial = 30\nexport const Layout = 31\nexport const Listener = 32\nexport const LocalStorage = 33\nexport const Menu = 34\nexport const Navigatiom = 35\nexport const Notification = 36\nexport const Open = 37\nexport const Preferences = 38\nexport const QuickPick = 39\nexport const RecentlyOpened = 40\nexport const SaveState = 41\nexport const ServiceWorker = 42\nexport const SessionReplay = 43\nexport const SessionStorage = 44\nexport const Test = 45\nexport const TestFramework = 46\nexport const TestFrameworkComponent = 47\nexport const TitleBarMenu = 48\nexport const Viewlet = 49\nexport const ViewletQuickPick = 50\nexport const Window = 51\nexport const Workbench = 52\nexport const Workspace = 53\nexport const ContentTracing = 55\nexport const OpenNativeFolder = 56\n", "class HTTPError extends Error {\n constructor(response, request, options) {\n const code = response.status || response.status === 0 ? response.status : \"\";\n const title = response.statusText || \"\";\n const status = `${code} ${title}`.trim();\n const reason = status ? `status code ${status}` : \"an unknown error\";\n super(`Request failed with ${reason}`);\n Object.defineProperty(this, \"response\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"request\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"options\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = \"HTTPError\";\n this.response = response;\n this.request = request;\n this.options = options;\n }\n}\nclass TimeoutError extends Error {\n constructor(request) {\n super(\"Request timed out\");\n Object.defineProperty(this, \"request\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = \"TimeoutError\";\n this.request = request;\n }\n}\nconst isObject = (value) => value !== null && typeof value === \"object\";\nconst validateAndMerge = (...sources) => {\n for (const source of sources) {\n if ((!isObject(source) || Array.isArray(source)) && typeof source !== \"undefined\") {\n throw new TypeError(\"The `options` argument must be an object\");\n }\n }\n return deepMerge({}, ...sources);\n};\nconst mergeHeaders = (source1 = {}, source2 = {}) => {\n const result = new globalThis.Headers(source1);\n const isHeadersInstance = source2 instanceof globalThis.Headers;\n const source = new globalThis.Headers(source2);\n for (const [key, value] of source.entries()) {\n if (isHeadersInstance && value === \"undefined\" || value === void 0) {\n result.delete(key);\n } else {\n result.set(key, value);\n }\n }\n return result;\n};\nconst deepMerge = (...sources) => {\n let returnValue = {};\n let headers = {};\n for (const source of sources) {\n if (Array.isArray(source)) {\n if (!Array.isArray(returnValue)) {\n returnValue = [];\n }\n returnValue = [...returnValue, ...source];\n } else if (isObject(source)) {\n for (let [key, value] of Object.entries(source)) {\n if (isObject(value) && key in returnValue) {\n value = deepMerge(returnValue[key], value);\n }\n returnValue = {...returnValue, [key]: value};\n }\n if (isObject(source.headers)) {\n headers = mergeHeaders(headers, source.headers);\n returnValue.headers = headers;\n }\n }\n }\n return returnValue;\n};\nconst supportsAbortController = typeof globalThis.AbortController === \"function\";\nconst supportsStreams = typeof globalThis.ReadableStream === \"function\";\nconst supportsFormData = typeof globalThis.FormData === \"function\";\nconst requestMethods = [\"get\", \"post\", \"put\", \"patch\", \"head\", \"delete\"];\nconst responseTypes = {\n json: \"application/json\",\n text: \"text/*\",\n formData: \"multipart/form-data\",\n arrayBuffer: \"*/*\",\n blob: \"*/*\"\n};\nconst maxSafeTimeout = 2147483647;\nconst stop = Symbol(\"stop\");\nconst normalizeRequestMethod = (input) => requestMethods.includes(input) ? input.toUpperCase() : input;\nconst retryMethods = [\"get\", \"put\", \"head\", \"delete\", \"options\", \"trace\"];\nconst retryStatusCodes = [408, 413, 429, 500, 502, 503, 504];\nconst retryAfterStatusCodes = [413, 429, 503];\nconst defaultRetryOptions = {\n limit: 2,\n methods: retryMethods,\n statusCodes: retryStatusCodes,\n afterStatusCodes: retryAfterStatusCodes,\n maxRetryAfter: Number.POSITIVE_INFINITY\n};\nconst normalizeRetryOptions = (retry = {}) => {\n if (typeof retry === \"number\") {\n return {\n ...defaultRetryOptions,\n limit: retry\n };\n }\n if (retry.methods && !Array.isArray(retry.methods)) {\n throw new Error(\"retry.methods must be an array\");\n }\n if (retry.statusCodes && !Array.isArray(retry.statusCodes)) {\n throw new Error(\"retry.statusCodes must be an array\");\n }\n return {\n ...defaultRetryOptions,\n ...retry,\n afterStatusCodes: retryAfterStatusCodes\n };\n};\nconst timeout = async (request, abortController, options) => new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n if (abortController) {\n abortController.abort();\n }\n reject(new TimeoutError(request));\n }, options.timeout);\n void options.fetch(request).then(resolve).catch(reject).then(() => {\n clearTimeout(timeoutId);\n });\n});\nconst delay = async (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\n});\nclass Ky {\n constructor(input, options = {}) {\n var _a, _b, _c;\n Object.defineProperty(this, \"request\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"abortController\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_retryCount\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 0\n });\n Object.defineProperty(this, \"_input\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"_options\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this._input = input;\n this._options = {\n credentials: this._input.credentials || \"same-origin\",\n ...options,\n headers: mergeHeaders(this._input.headers, options.headers),\n hooks: deepMerge({\n beforeRequest: [],\n beforeRetry: [],\n beforeError: [],\n afterResponse: []\n }, options.hooks),\n method: normalizeRequestMethod((_a = options.method) != null ? _a : this._input.method),\n prefixUrl: String(options.prefixUrl || \"\"),\n retry: normalizeRetryOptions(options.retry),\n throwHttpErrors: options.throwHttpErrors !== false,\n timeout: typeof options.timeout === \"undefined\" ? 1e4 : options.timeout,\n fetch: (_b = options.fetch) != null ? _b : globalThis.fetch.bind(globalThis)\n };\n if (typeof this._input !== \"string\" && !(this._input instanceof URL || this._input instanceof globalThis.Request)) {\n throw new TypeError(\"`input` must be a string, URL, or Request\");\n }\n if (this._options.prefixUrl && typeof this._input === \"string\") {\n if (this._input.startsWith(\"/\")) {\n throw new Error(\"`input` must not begin with a slash when using `prefixUrl`\");\n }\n if (!this._options.prefixUrl.endsWith(\"/\")) {\n this._options.prefixUrl += \"/\";\n }\n this._input = this._options.prefixUrl + this._input;\n }\n if (supportsAbortController) {\n this.abortController = new globalThis.AbortController();\n if (this._options.signal) {\n this._options.signal.addEventListener(\"abort\", () => {\n this.abortController.abort();\n });\n }\n this._options.signal = this.abortController.signal;\n }\n this.request = new globalThis.Request(this._input, this._options);\n if (this._options.searchParams) {\n const textSearchParams = typeof this._options.searchParams === \"string\" ? this._options.searchParams.replace(/^\\?/, \"\") : new URLSearchParams(this._options.searchParams).toString();\n const searchParams = \"?\" + textSearchParams;\n const url = this.request.url.replace(/(?:\\?.*?)?(?=#|$)/, searchParams);\n if ((supportsFormData && this._options.body instanceof globalThis.FormData || this._options.body instanceof URLSearchParams) && !(this._options.headers && this._options.headers[\"content-type\"])) {\n this.request.headers.delete(\"content-type\");\n }\n this.request = new globalThis.Request(new globalThis.Request(url, this.request), this._options);\n }\n if (this._options.json !== void 0) {\n this._options.body = JSON.stringify(this._options.json);\n this.request.headers.set(\"content-type\", (_c = this._options.headers.get(\"content-type\")) != null ? _c : \"application/json\");\n this.request = new globalThis.Request(this.request, {body: this._options.body});\n }\n }\n static create(input, options) {\n const ky2 = new Ky(input, options);\n const fn = async () => {\n if (ky2._options.timeout > maxSafeTimeout) {\n throw new RangeError(`The \\`timeout\\` option cannot be greater than ${maxSafeTimeout}`);\n }\n await Promise.resolve();\n let response = await ky2._fetch();\n for (const hook of ky2._options.hooks.afterResponse) {\n const modifiedResponse = await hook(ky2.request, ky2._options, ky2._decorateResponse(response.clone()));\n if (modifiedResponse instanceof globalThis.Response) {\n response = modifiedResponse;\n }\n }\n ky2._decorateResponse(response);\n if (!response.ok && ky2._options.throwHttpErrors) {\n let error = new HTTPError(response, ky2.request, ky2._options);\n for (const hook of ky2._options.hooks.beforeError) {\n error = await hook(error);\n }\n throw error;\n }\n if (ky2._options.onDownloadProgress) {\n if (typeof ky2._options.onDownloadProgress !== \"function\") {\n throw new TypeError(\"The `onDownloadProgress` option must be a function\");\n }\n if (!supportsStreams) {\n throw new Error(\"Streams are not supported in your environment. `ReadableStream` is missing.\");\n }\n return ky2._stream(response.clone(), ky2._options.onDownloadProgress);\n }\n return response;\n };\n const isRetriableMethod = ky2._options.retry.methods.includes(ky2.request.method.toLowerCase());\n const result = isRetriableMethod ? ky2._retry(fn) : fn();\n for (const [type, mimeType] of Object.entries(responseTypes)) {\n result[type] = async () => {\n ky2.request.headers.set(\"accept\", ky2.request.headers.get(\"accept\") || mimeType);\n const awaitedResult = await result;\n const response = awaitedResult.clone();\n if (type === \"json\") {\n if (response.status === 204) {\n return \"\";\n }\n if (options.parseJson) {\n return options.parseJson(await response.text());\n }\n }\n return response[type]();\n };\n }\n return result;\n }\n _calculateRetryDelay(error) {\n this._retryCount++;\n if (this._retryCount < this._options.retry.limit && !(error instanceof TimeoutError)) {\n if (error instanceof HTTPError) {\n if (!this._options.retry.statusCodes.includes(error.response.status)) {\n return 0;\n }\n const retryAfter = error.response.headers.get(\"Retry-After\");\n if (retryAfter && this._options.retry.afterStatusCodes.includes(error.response.status)) {\n let after = Number(retryAfter);\n if (Number.isNaN(after)) {\n after = Date.parse(retryAfter) - Date.now();\n } else {\n after *= 1e3;\n }\n if (typeof this._options.retry.maxRetryAfter !== \"undefined\" && after > this._options.retry.maxRetryAfter) {\n return 0;\n }\n return after;\n }\n if (error.response.status === 413) {\n return 0;\n }\n }\n const BACKOFF_FACTOR = 0.3;\n return BACKOFF_FACTOR * 2 ** (this._retryCount - 1) * 1e3;\n }\n return 0;\n }\n _decorateResponse(response) {\n if (this._options.parseJson) {\n response.json = async () => this._options.parseJson(await response.text());\n }\n return response;\n }\n async _retry(fn) {\n try {\n return await fn();\n } catch (error) {\n const ms = Math.min(this._calculateRetryDelay(error), maxSafeTimeout);\n if (ms !== 0 && this._retryCount > 0) {\n await delay(ms);\n for (const hook of this._options.hooks.beforeRetry) {\n const hookResult = await hook({\n request: this.request,\n options: this._options,\n error,\n retryCount: this._retryCount\n });\n if (hookResult === stop) {\n return;\n }\n }\n return this._retry(fn);\n }\n throw error;\n }\n }\n async _fetch() {\n for (const hook of this._options.hooks.beforeRequest) {\n const result = await hook(this.request, this._options);\n if (result instanceof Request) {\n this.request = result;\n break;\n }\n if (result instanceof Response) {\n return result;\n }\n }\n if (this._options.timeout === false) {\n return this._options.fetch(this.request.clone());\n }\n return timeout(this.request.clone(), this.abortController, this._options);\n }\n _stream(response, onDownloadProgress) {\n const totalBytes = Number(response.headers.get(\"content-length\")) || 0;\n let transferredBytes = 0;\n return new globalThis.Response(new globalThis.ReadableStream({\n async start(controller) {\n const reader = response.body.getReader();\n if (onDownloadProgress) {\n onDownloadProgress({percent: 0, transferredBytes: 0, totalBytes}, new Uint8Array());\n }\n async function read() {\n const {done, value} = await reader.read();\n if (done) {\n controller.close();\n return;\n }\n if (onDownloadProgress) {\n transferredBytes += value.byteLength;\n const percent = totalBytes === 0 ? 0 : transferredBytes / totalBytes;\n onDownloadProgress({percent, transferredBytes, totalBytes}, value);\n }\n controller.enqueue(value);\n await read();\n }\n await read();\n }\n }), {\n status: response.status,\n statusText: response.statusText,\n headers: response.headers\n });\n }\n}\n/*! MIT License \u00A9 Sindre Sorhus */\nconst createInstance = (defaults) => {\n const ky2 = (input, options) => Ky.create(input, validateAndMerge(defaults, options));\n for (const method of requestMethods) {\n ky2[method] = (input, options) => Ky.create(input, validateAndMerge(defaults, options, {method}));\n }\n ky2.create = (newDefaults) => createInstance(validateAndMerge(newDefaults));\n ky2.extend = (newDefaults) => createInstance(validateAndMerge(defaults, newDefaults));\n ky2.stop = stop;\n return ky2;\n};\nconst ky = createInstance();\nexport default ky;\nexport {HTTPError, TimeoutError};\n", "const getCombinedMessage = (error, message) => {\n if (message) {\n return `${message}: ${error}`\n }\n return `${error}`\n}\n\nconst mergeStacks = (parent, child) => {\n if (!child) {\n return parent\n }\n let i = 1\n const childLines = child.split('\\n')\n const parentLines = parent.split('\\n')\n const childLinesLength = childLines.length\n const parentLinesLength = parentLines.length\n const minLines = Math.min(childLinesLength, parentLinesLength)\n while (i++ < minLines) {\n if (\n childLines[childLinesLength - i] !== parentLines[parentLinesLength - i]\n ) {\n break\n }\n }\n const topPart = parentLines.slice(0, parentLinesLength - i + 1)\n const bottomPart = childLines.slice(childLinesLength - i)\n const combined = topPart.join('\\n') + '\\n' + bottomPart.join('\\n')\n return combined\n}\n\nexport class VError extends Error {\n constructor(error, message) {\n const combinedMessage = getCombinedMessage(error, message)\n super(combinedMessage)\n this.name = 'VError'\n if (error instanceof Error) {\n this.stack = mergeStacks(this.stack, error.stack)\n }\n }\n}\n", "import ky, { HTTPError } from '../../../static/js/ky.js'\nimport { VError } from '../VError/VError.js'\n\nexport const getJson = async (url, options = {}) => {\n try {\n // cannot use ky(url).json() because it sets \"accept: application/json\"\n // which doesn't work with preload, see\n // https://stackoverflow.com/questions/41655955/why-are-preload-link-not-working-for-json-requests#answer-48645748\n const response = await ky(url, options)\n return response.json()\n } catch (error) {\n if (\n error &&\n error instanceof TypeError &&\n error.message === 'Failed to fetch'\n ) {\n throw new VError(\n `Failed to request json from \"${url}\". Make sure that the server is running and has CORS enabled`\n )\n }\n if (error && error instanceof HTTPError) {\n let json\n try {\n json = await error.response.json()\n } catch {\n throw error\n }\n if (json && json.message) {\n throw new VError(\n `Failed to request json from \"${url}\": ${json.message}`\n )\n }\n }\n // @ts-ignore\n error.message = `Failed to request json from \"${url}\": ${error.message}`\n throw error\n }\n}\n\nexport const getJsonLocal = (url) => {\n return getJson(url, {\n mode: 'no-cors',\n })\n}\n\nexport const getText = async (url, options = {}) => {\n try {\n return await ky(url, options).text()\n } catch (error) {\n if (\n error &&\n error instanceof TypeError &&\n error.message === 'Failed to fetch'\n ) {\n throw new VError(\n error,\n `Failed to request text from \"${url}\". Make sure that the server is running and has CORS enabled`\n )\n }\n throw new VError(error, `Failed to request text from \"${url}\"`)\n }\n}\n", "import * as Ajax from './Ajax.js'\n\n// TODO only use Ajax module via ipc -> that way is is always lazyloaded\n\nexport const Commands = {\n 'Ajax.getJson': Ajax.getJson,\n 'Ajax.getText': Ajax.getText,\n}\n", "// TODO treeshake out this whole module in production\n\nconst getType = (value) => {\n switch (typeof value) {\n case 'number':\n return 'number'\n case 'function':\n return 'function'\n case 'string':\n return 'string'\n case 'object':\n if (value === null) {\n return 'null'\n }\n if (Array.isArray(value)) {\n return 'array'\n }\n if (value instanceof Uint32Array) {\n return 'uint32array'\n }\n return 'object'\n case 'boolean':\n return 'boolean'\n default:\n return 'unknown'\n }\n}\n\nexport const object = (value) => {\n const type = getType(value)\n if (type !== 'object') {\n throw new Error('expected value to be of type object')\n }\n}\n\nexport const number = (value) => {\n const type = getType(value)\n if (type !== 'number') {\n throw new Error('expected value to be of type number')\n }\n if (isNaN(value)) {\n throw new Error('value is NaN')\n }\n}\n\nexport const array = (value) => {\n const type = getType(value)\n if (type !== 'array') {\n throw new Error('expected value to be of type array')\n }\n}\n\nexport const string = (value) => {\n const type = getType(value)\n if (type !== 'string') {\n throw new Error('expected value to be of type string')\n }\n}\n\nexport const null_ = (value) => {\n const type = getType(value)\n if (type !== 'null') {\n throw new Error('expected value to be of type null')\n }\n}\n\nexport const boolean = (value) => {\n const type = getType(value)\n if (type !== 'boolean') {\n throw new Error('expected value to be of type boolean')\n }\n}\n\nexport const fn = (value) => {\n const type = getType(value)\n if (type !== 'function') {\n throw new Error('expected value to be of type function')\n }\n}\n\nexport const uint32array = (value) => {\n const type = getType(value)\n if (type !== 'uint32array') {\n throw new Error('expected value to be of type uint32array')\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\n\nexport const state = {\n callbacks: Object.create(null),\n onceListeners: new Set(),\n id: 2,\n}\n\nexport const register = (resolve, reject) => {\n state.callbacks[++state.id] = {\n resolve,\n reject,\n }\n return state.id\n}\n\nexport const unregister = (id) => {\n delete state.callbacks[id]\n}\n\n// TODO merge resolve and resolveEmpty\nexport const resolve = (id, args) => {\n Assert.number(id)\n if (!(id in state.callbacks)) {\n console.log(args)\n console.warn(`callback ${id} may already be disposed`)\n return\n }\n state.callbacks[id].resolve(args)\n delete state.callbacks[id]\n}\n\nexport const resolveEmpty = (id) => {\n if (!(id in state.callbacks)) {\n console.warn(`callback ${id} may already be disposed`)\n return\n }\n state.callbacks[id].resolve()\n}\n\nexport const reject = (id, error) => {\n Assert.number(id)\n if (!(id in state.callbacks)) {\n console.warn(`callback ${id} may already be disposed`)\n return\n }\n state.callbacks[id].reject(error)\n}\n\nexport const isAllEmpty = () => {\n return (\n Object.keys(state.callbacks).length === 0 && state.onceListeners.size === 0\n )\n}\n", "export class JsonRpcError extends Error {\n constructor(message) {\n super(message)\n this.name = 'JsonRpcError'\n }\n}\n", "export const listen = () => {\n const messageChannel = new MessageChannel()\n globalThis.acceptPort(messageChannel.port2)\n return {\n send(message) {\n messageChannel.port1.postMessage(message)\n },\n sendAndTransfer(message, transferables) {\n messageChannel.port1.postMessage(message, transferables)\n },\n get onmessage() {\n return messageChannel.port1.onmessage\n },\n set onmessage(listener) {\n messageChannel.port1.onmessage = listener\n },\n }\n}\n", "export const listen = () => {\n postMessage('ready')\n return {\n send(message) {\n postMessage(message)\n },\n sendAndTransfer(message, transferables) {\n postMessage(message, transferables)\n },\n get onmessage() {\n return onmessage\n },\n set onmessage(listener) {\n onmessage = listener\n },\n }\n}\n", "export const listen = () => {\n const referencePort = {\n onmessage(message, transferables) {},\n postMessage() {},\n }\n // TODO get rid of extra data wrapper\n globalThis.acceptReferencePort(referencePort)\n return {\n send(message) {\n referencePort.onmessage({ data: message })\n },\n sendAndTransfer({ data: message }, transferables) {\n referencePort.onmessage(message, transferables)\n },\n get onmessage() {\n // TODO\n return null\n },\n set onmessage(listener) {\n // TODO\n },\n }\n}\n", "export const Methods = {\n MessagePort: 1,\n ModuleWorker: 2,\n ReferencePort: 3,\n get Auto() {\n if (globalThis.acceptPort) {\n return Methods.MessagePort\n }\n if (globalThis.acceptReferencePort) {\n return Methods.ReferencePort\n }\n return Methods.ModuleWorker\n },\n}\n\nconst getModule = (method) => {\n switch (method) {\n case Methods.MessagePort:\n return import('./IpcChildWithMessagePort.js')\n case Methods.ModuleWorker:\n return import('./IpcChildWithModuleWorker.js')\n case Methods.ReferencePort:\n return import('./IpcChildWithReferencePort.js')\n default:\n throw new Error('unexpected ipc type')\n }\n}\n\nexport const listen = async ({ method }) => {\n const module = await getModule(method)\n return module.listen()\n}\n", "/* istanbul ignore file */\nimport * as Callback from '../Callback/Callback.js'\nimport * as Command from '../Command/Command.js'\nimport { JsonRpcError } from '../Errors/Errors.js'\nimport * as IpcChild from '../IpcChild/IpcChild.js'\n\nexport const state = {\n pendingMessages: [],\n /**\n * @type {any}\n */\n ipc: undefined,\n}\n\nconst handleMessageFromRendererProcess = async (event) => {\n const message = event.data\n if (typeof message === 'string') {\n console.warn(`unexpected message from renderer process: ${message}`)\n return\n }\n if (message.id) {\n if ('method' in message) {\n try {\n const result = await Command.execute(message.method, ...message.params)\n state.ipc.send({\n jsonrpc: '2.0',\n id: message.id,\n result,\n })\n return\n } catch (error) {\n state.ipc.send({\n jsonrpc: '2.0',\n id: message.id,\n error,\n })\n return\n }\n }\n Callback.resolve(message.id, message)\n return\n }\n await Command.execute(message.method, ...message.params)\n}\n\nconst getIpc = () => {\n return IpcChild.listen({ method: IpcChild.Methods.Auto })\n}\n\nexport const listen = async () => {\n console.assert(state.pendingMessages.length === 0)\n const ipc = await getIpc()\n ipc.onmessage = handleMessageFromRendererProcess\n state.ipc = ipc\n}\n\n/**\n * @deprecated use invoke instead\n * @param {*} message\n */\nexport const send = (message) => {\n state.ipc.send(message)\n}\n\nconst deserializeError = (serializedError) => {\n const error = new Error()\n if (serializedError && serializedError.message) {\n error.message = serializedError.message\n }\n if (serializedError && serializedError.stack) {\n error.stack = serializedError.stack\n }\n return error\n}\n\nconst combineStacks = (upperStack, lowerStack) => {\n const indexNewLine = lowerStack.indexOf('\\n')\n return upperStack + lowerStack.slice(indexNewLine)\n}\n\nclass RendererProcessError extends Error {\n constructor(serializedError) {\n const deserializedError = deserializeError(serializedError)\n super(deserializedError.message)\n if (this.stack) {\n this.stack = combineStacks(deserializedError.stack, this.stack)\n }\n }\n}\n\nexport const invoke = async (method, ...parameters) => {\n const responseMessage = await new Promise((resolve, reject) => {\n const callbackId = Callback.register(resolve, reject)\n if (!state.ipc) {\n reject(new Error('ipc not active'))\n return\n }\n state.ipc.send({\n jsonrpc: '2.0',\n method,\n params: parameters,\n id: callbackId,\n })\n })\n if ('error' in responseMessage) {\n throw new RendererProcessError(responseMessage.error)\n }\n if ('result' in responseMessage) {\n return responseMessage.result\n }\n new JsonRpcError('unexpected message from renderer process')\n}\n\nexport const sendAndTransfer = (message, transferables) => {\n state.ipc.sendAndTransfer(message, transferables)\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const playBell = async () => {\n const src = '/sounds/bell.oga'\n await RendererProcess.invoke(/* Audio.play */ 3211, /* src */ src)\n}\n", "import * as Audio from './Audio.js'\n\nexport const Commands = {\n 'Audio.playBell': Audio.playBell,\n}\n", "/**\n * base64.ts\n *\n * Licensed under the BSD 3-Clause License.\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * References:\n * http://en.wikipedia.org/wiki/Base64\n *\n * @author Dan Kogai (https://github.com/dankogai)\n */\nconst version = '3.7.2';\n/**\n * @deprecated use lowercase `version`.\n */\nconst VERSION = version;\nconst _hasatob = typeof atob === 'function';\nconst _hasbtoa = typeof btoa === 'function';\nconst _hasBuffer = typeof Buffer === 'function';\nconst _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\nconst _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\nconst b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\nconst b64chs = Array.prototype.slice.call(b64ch);\nconst b64tab = ((a) => {\n let tab = {};\n a.forEach((c, i) => tab[c] = i);\n return tab;\n})(b64chs);\nconst b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\nconst _fromCC = String.fromCharCode.bind(String);\nconst _U8Afrom = typeof Uint8Array.from === 'function'\n ? Uint8Array.from.bind(Uint8Array)\n : (it, fn = (x) => x) => new Uint8Array(Array.prototype.slice.call(it, 0).map(fn));\nconst _mkUriSafe = (src) => src\n .replace(/=/g, '').replace(/[+\\/]/g, (m0) => m0 == '+' ? '-' : '_');\nconst _tidyB64 = (s) => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n/**\n * polyfill version of `btoa`\n */\nconst btoaPolyfill = (bin) => {\n // console.log('polyfilled');\n let u32, c0, c1, c2, asc = '';\n const pad = bin.length % 3;\n for (let i = 0; i < bin.length;) {\n if ((c0 = bin.charCodeAt(i++)) > 255 ||\n (c1 = bin.charCodeAt(i++)) > 255 ||\n (c2 = bin.charCodeAt(i++)) > 255)\n throw new TypeError('invalid character found');\n u32 = (c0 << 16) | (c1 << 8) | c2;\n asc += b64chs[u32 >> 18 & 63]\n + b64chs[u32 >> 12 & 63]\n + b64chs[u32 >> 6 & 63]\n + b64chs[u32 & 63];\n }\n return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n};\n/**\n * does what `window.btoa` of web browsers do.\n * @param {String} bin binary string\n * @returns {string} Base64-encoded string\n */\nconst _btoa = _hasbtoa ? (bin) => btoa(bin)\n : _hasBuffer ? (bin) => Buffer.from(bin, 'binary').toString('base64')\n : btoaPolyfill;\nconst _fromUint8Array = _hasBuffer\n ? (u8a) => Buffer.from(u8a).toString('base64')\n : (u8a) => {\n // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n const maxargs = 0x1000;\n let strs = [];\n for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n }\n return _btoa(strs.join(''));\n };\n/**\n * converts a Uint8Array to a Base64 string.\n * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 \u00A75\n * @returns {string} Base64 string\n */\nconst fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const utob = (src: string) => unescape(encodeURIComponent(src));\n// reverting good old fationed regexp\nconst cb_utob = (c) => {\n if (c.length < 2) {\n var cc = c.charCodeAt(0);\n return cc < 0x80 ? c\n : cc < 0x800 ? (_fromCC(0xc0 | (cc >>> 6))\n + _fromCC(0x80 | (cc & 0x3f)))\n : (_fromCC(0xe0 | ((cc >>> 12) & 0x0f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n else {\n var cc = 0x10000\n + (c.charCodeAt(0) - 0xD800) * 0x400\n + (c.charCodeAt(1) - 0xDC00);\n return (_fromCC(0xf0 | ((cc >>> 18) & 0x07))\n + _fromCC(0x80 | ((cc >>> 12) & 0x3f))\n + _fromCC(0x80 | ((cc >>> 6) & 0x3f))\n + _fromCC(0x80 | (cc & 0x3f)));\n }\n};\nconst re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-8 string\n * @returns {string} UTF-16 string\n */\nconst utob = (u) => u.replace(re_utob, cb_utob);\n//\nconst _encode = _hasBuffer\n ? (s) => Buffer.from(s, 'utf8').toString('base64')\n : _TE\n ? (s) => _fromUint8Array(_TE.encode(s))\n : (s) => _btoa(utob(s));\n/**\n * converts a UTF-8-encoded string to a Base64 string.\n * @param {boolean} [urlsafe] if `true` make the result URL-safe\n * @returns {string} Base64 string\n */\nconst encode = (src, urlsafe = false) => urlsafe\n ? _mkUriSafe(_encode(src))\n : _encode(src);\n/**\n * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 \u00A75.\n * @returns {string} Base64 string\n */\nconst encodeURI = (src) => encode(src, true);\n// This trick is found broken https://github.com/dankogai/js-base64/issues/130\n// const btou = (src: string) => decodeURIComponent(escape(src));\n// reverting good old fationed regexp\nconst re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\nconst cb_btou = (cccc) => {\n switch (cccc.length) {\n case 4:\n var cp = ((0x07 & cccc.charCodeAt(0)) << 18)\n | ((0x3f & cccc.charCodeAt(1)) << 12)\n | ((0x3f & cccc.charCodeAt(2)) << 6)\n | (0x3f & cccc.charCodeAt(3)), offset = cp - 0x10000;\n return (_fromCC((offset >>> 10) + 0xD800)\n + _fromCC((offset & 0x3FF) + 0xDC00));\n case 3:\n return _fromCC(((0x0f & cccc.charCodeAt(0)) << 12)\n | ((0x3f & cccc.charCodeAt(1)) << 6)\n | (0x3f & cccc.charCodeAt(2)));\n default:\n return _fromCC(((0x1f & cccc.charCodeAt(0)) << 6)\n | (0x3f & cccc.charCodeAt(1)));\n }\n};\n/**\n * @deprecated should have been internal use only.\n * @param {string} src UTF-16 string\n * @returns {string} UTF-8 string\n */\nconst btou = (b) => b.replace(re_btou, cb_btou);\n/**\n * polyfill version of `atob`\n */\nconst atobPolyfill = (asc) => {\n // console.log('polyfilled');\n asc = asc.replace(/\\s+/g, '');\n if (!b64re.test(asc))\n throw new TypeError('malformed base64.');\n asc += '=='.slice(2 - (asc.length & 3));\n let u24, bin = '', r1, r2;\n for (let i = 0; i < asc.length;) {\n u24 = b64tab[asc.charAt(i++)] << 18\n | b64tab[asc.charAt(i++)] << 12\n | (r1 = b64tab[asc.charAt(i++)]) << 6\n | (r2 = b64tab[asc.charAt(i++)]);\n bin += r1 === 64 ? _fromCC(u24 >> 16 & 255)\n : r2 === 64 ? _fromCC(u24 >> 16 & 255, u24 >> 8 & 255)\n : _fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255);\n }\n return bin;\n};\n/**\n * does what `window.atob` of web browsers do.\n * @param {String} asc Base64-encoded string\n * @returns {string} binary string\n */\nconst _atob = _hasatob ? (asc) => atob(_tidyB64(asc))\n : _hasBuffer ? (asc) => Buffer.from(asc, 'base64').toString('binary')\n : atobPolyfill;\n//\nconst _toUint8Array = _hasBuffer\n ? (a) => _U8Afrom(Buffer.from(a, 'base64'))\n : (a) => _U8Afrom(_atob(a), c => c.charCodeAt(0));\n/**\n * converts a Base64 string to a Uint8Array.\n */\nconst toUint8Array = (a) => _toUint8Array(_unURI(a));\n//\nconst _decode = _hasBuffer\n ? (a) => Buffer.from(a, 'base64').toString('utf8')\n : _TD\n ? (a) => _TD.decode(_toUint8Array(a))\n : (a) => btou(_atob(a));\nconst _unURI = (a) => _tidyB64(a.replace(/[-_]/g, (m0) => m0 == '-' ? '+' : '/'));\n/**\n * converts a Base64 string to a UTF-8 string.\n * @param {String} src Base64 string. Both normal and URL-safe are supported\n * @returns {string} UTF-8 string\n */\nconst decode = (src) => _decode(_unURI(src));\n/**\n * check if a value is a valid Base64 string\n * @param {String} src a value to check\n */\nconst isValid = (src) => {\n if (typeof src !== 'string')\n return false;\n const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n};\n//\nconst _noEnum = (v) => {\n return {\n value: v, enumerable: false, writable: true, configurable: true\n };\n};\n/**\n * extend String.prototype with relevant methods\n */\nconst extendString = function () {\n const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n _add('fromBase64', function () { return decode(this); });\n _add('toBase64', function (urlsafe) { return encode(this, urlsafe); });\n _add('toBase64URI', function () { return encode(this, true); });\n _add('toBase64URL', function () { return encode(this, true); });\n _add('toUint8Array', function () { return toUint8Array(this); });\n};\n/**\n * extend Uint8Array.prototype with relevant methods\n */\nconst extendUint8Array = function () {\n const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n _add('toBase64', function (urlsafe) { return fromUint8Array(this, urlsafe); });\n _add('toBase64URI', function () { return fromUint8Array(this, true); });\n _add('toBase64URL', function () { return fromUint8Array(this, true); });\n};\n/**\n * extend Builtin prototypes with relevant methods\n */\nconst extendBuiltins = () => {\n extendString();\n extendUint8Array();\n};\nconst gBase64 = {\n version: version,\n VERSION: VERSION,\n atob: _atob,\n atobPolyfill: atobPolyfill,\n btoa: _btoa,\n btoaPolyfill: btoaPolyfill,\n fromBase64: decode,\n toBase64: encode,\n encode: encode,\n encodeURI: encodeURI,\n encodeURL: encodeURI,\n utob: utob,\n btou: btou,\n decode: decode,\n isValid: isValid,\n fromUint8Array: fromUint8Array,\n toUint8Array: toUint8Array,\n extendString: extendString,\n extendUint8Array: extendUint8Array,\n extendBuiltins: extendBuiltins,\n};\n// makecjs:CUT //\nexport { version };\nexport { VERSION };\nexport { _atob as atob };\nexport { atobPolyfill };\nexport { _btoa as btoa };\nexport { btoaPolyfill };\nexport { decode as fromBase64 };\nexport { encode as toBase64 };\nexport { utob };\nexport { encode };\nexport { encodeURI };\nexport { encodeURI as encodeURL };\nexport { btou };\nexport { decode };\nexport { isValid };\nexport { fromUint8Array };\nexport { toUint8Array };\nexport { extendString };\nexport { extendUint8Array };\nexport { extendBuiltins };\n// and finally,\nexport { gBase64 as Base64 };\n", "import * as JsBase64 from '../../../static/js/js-base64.js'\n\nexport const decode = (encoded) => {\n const decoded = JsBase64.decode(encoded)\n return decoded\n}\n", "import * as Base64 from './Base64.js'\n\nexport const Commands = {\n 'Base64.decode': Base64.decode,\n}\n", "function loadImage(src, crossOrigin) {\n return new Promise(function(resolve, reject) {\n var img = new Image();\n if (crossOrigin) {\n img.crossOrigin = crossOrigin;\n }\n img.onload = function() {\n resolve(img);\n };\n img.onerror = reject;\n img.src = src;\n });\n}\nfunction imgToCanvas(img) {\n var canvas = document.createElement(\"canvas\");\n canvas.width = img.width;\n canvas.height = img.height;\n var context = canvas.getContext(\"2d\");\n context.drawImage(img, 0, 0, img.width, img.height, 0, 0, img.width, img.height);\n return canvas;\n}\nfunction createBlob(parts, properties) {\n parts = parts || [];\n properties = properties || {};\n if (typeof properties === \"string\") {\n properties = {type: properties};\n }\n try {\n return new Blob(parts, properties);\n } catch (e) {\n if (e.name !== \"TypeError\") {\n throw e;\n }\n var Builder = typeof BlobBuilder !== \"undefined\" ? BlobBuilder : typeof MSBlobBuilder !== \"undefined\" ? MSBlobBuilder : typeof MozBlobBuilder !== \"undefined\" ? MozBlobBuilder : WebKitBlobBuilder;\n var builder = new Builder();\n for (var i = 0; i < parts.length; i += 1) {\n builder.append(parts[i]);\n }\n return builder.getBlob(properties.type);\n }\n}\nfunction createObjectURL(blob) {\n return (typeof URL !== \"undefined\" ? URL : webkitURL).createObjectURL(blob);\n}\nfunction revokeObjectURL(url) {\n return (typeof URL !== \"undefined\" ? URL : webkitURL).revokeObjectURL(url);\n}\nfunction blobToBinaryString(blob) {\n return new Promise(function(resolve, reject) {\n var reader = new FileReader();\n var hasBinaryString = typeof reader.readAsBinaryString === \"function\";\n reader.onloadend = function() {\n var result = reader.result || \"\";\n if (hasBinaryString) {\n return resolve(result);\n }\n resolve(arrayBufferToBinaryString(result));\n };\n reader.onerror = reject;\n if (hasBinaryString) {\n reader.readAsBinaryString(blob);\n } else {\n reader.readAsArrayBuffer(blob);\n }\n });\n}\nfunction base64StringToBlob(base64, type) {\n var parts = [binaryStringToArrayBuffer(atob(base64))];\n return type ? createBlob(parts, {type}) : createBlob(parts);\n}\nfunction binaryStringToBlob(binary, type) {\n return base64StringToBlob(btoa(binary), type);\n}\nfunction blobToBase64String(blob) {\n return blobToBinaryString(blob).then(btoa);\n}\nfunction dataURLToBlob(dataURL) {\n var type = dataURL.match(/data:([^;]+)/)[1];\n var base64 = dataURL.replace(/^[^,]+,/, \"\");\n var buff = binaryStringToArrayBuffer(atob(base64));\n return createBlob([buff], {type});\n}\nfunction blobToDataURL(blob) {\n return blobToBase64String(blob).then(function(base64String) {\n return \"data:\" + blob.type + \";base64,\" + base64String;\n });\n}\nfunction imgSrcToDataURL(src, type, crossOrigin, quality) {\n type = type || \"image/png\";\n return loadImage(src, crossOrigin).then(imgToCanvas).then(function(canvas) {\n return canvas.toDataURL(type, quality);\n });\n}\nfunction canvasToBlob(canvas, type, quality) {\n if (typeof canvas.toBlob === \"function\") {\n return new Promise(function(resolve) {\n canvas.toBlob(resolve, type, quality);\n });\n }\n return Promise.resolve(dataURLToBlob(canvas.toDataURL(type, quality)));\n}\nfunction imgSrcToBlob(src, type, crossOrigin, quality) {\n type = type || \"image/png\";\n return loadImage(src, crossOrigin).then(imgToCanvas).then(function(canvas) {\n return canvasToBlob(canvas, type, quality);\n });\n}\nfunction arrayBufferToBlob(buffer, type) {\n return createBlob([buffer], type);\n}\nfunction blobToArrayBuffer(blob) {\n return new Promise(function(resolve, reject) {\n var reader = new FileReader();\n reader.onloadend = function() {\n var result = reader.result || new ArrayBuffer(0);\n resolve(result);\n };\n reader.onerror = reject;\n reader.readAsArrayBuffer(blob);\n });\n}\nfunction arrayBufferToBinaryString(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var length = bytes.byteLength;\n var i = -1;\n while (++i < length) {\n binary += String.fromCharCode(bytes[i]);\n }\n return binary;\n}\nfunction binaryStringToArrayBuffer(binary) {\n var length = binary.length;\n var buf = new ArrayBuffer(length);\n var arr = new Uint8Array(buf);\n var i = -1;\n while (++i < length) {\n arr[i] = binary.charCodeAt(i);\n }\n return buf;\n}\nexport {arrayBufferToBinaryString, arrayBufferToBlob, base64StringToBlob, binaryStringToArrayBuffer, binaryStringToBlob, blobToArrayBuffer, blobToBase64String, blobToBinaryString, blobToDataURL, canvasToBlob, createBlob, createObjectURL, dataURLToBlob, imgSrcToBlob, imgSrcToDataURL, revokeObjectURL};\nexport default null;\n", "import * as BlobUtil from '../../../static/js/blob-util.js'\n\nexport const base64StringToBlob = (base64String) => {\n return BlobUtil.base64StringToBlob(base64String)\n}\n", "import * as Blob from './Blob.js'\n\nexport const Commands = {\n 'Blob.base64StringToBlob': Blob.base64StringToBlob,\n}\n", "import * as Callback from '../Callback/Callback.js'\n\nexport const send = (transport, method, ...parameters) => {\n transport.send({\n jsonrpc: '2.0',\n method,\n params: parameters,\n })\n}\n\nexport const invoke = (transport, method, ...parameters) => {\n return new Promise((resolve, reject) => {\n // TODO use one map instead of two\n const callbackId = Callback.register(resolve, reject)\n transport.send({\n jsonrpc: '2.0',\n method,\n params: parameters,\n id: callbackId,\n })\n })\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Assert from '../Assert/Assert.js'\n\nexport const create = async (options) => {\n const type = options.type\n Assert.string(type)\n const originalOnMessage = RendererProcess.state.ipc.onmessage\n const port = await new Promise((resolve, reject) => {\n RendererProcess.state.ipc.onmessage = (event) => {\n if (event.data === 'port') {\n const port = event.ports[0]\n resolve(port)\n } else {\n originalOnMessage(event)\n }\n }\n RendererProcess.state.ipc.send({ method: 'get-port', params: [type] })\n })\n RendererProcess.state.ipc.onmessage = originalOnMessage\n let handleMessage\n return {\n get onmessage() {\n return handleMessage\n },\n set onmessage(listener) {\n if (listener) {\n handleMessage = (event) => {\n // TODO why are some events not instance of message event?\n if (event instanceof MessageEvent) {\n listener(event.data)\n } else {\n listener(event)\n }\n }\n } else {\n handleMessage = null\n }\n port.onmessage = handleMessage\n },\n send(message) {\n port.postMessage(message)\n },\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\n\nexport const create = async ({ url }) => {\n Assert.string(url)\n const port = await new Promise((resolve) => {\n globalThis.acceptPort = resolve\n import(url)\n })\n delete globalThis.acceptPort\n let handleMessage\n return {\n get onmessage() {\n return port.onmessage\n },\n set onmessage(listener) {\n if (listener) {\n handleMessage = (event) => {\n // TODO why are some events not instance of message event?\n if (event instanceof MessageEvent) {\n const message = event.data\n listener(message)\n } else {\n listener(event)\n }\n }\n } else {\n handleMessage = null\n }\n port.onmessage = handleMessage\n },\n send(message) {\n port.postMessage(message)\n },\n }\n}\n", "const getDisplayName = (name) => {\n if (!name) {\n return '<unknown> worker'\n }\n if (name.endsWith('Worker')) {\n return name.toLowerCase()\n }\n return `${name} worker`\n}\n\nconst tryToGetActualErrorMessage = async ({ url, name }) => {\n const displayName = getDisplayName(name)\n try {\n await import(url)\n return `Failed to start ${displayName}: Unknown Error`\n } catch (error) {\n if (\n error &&\n error instanceof Error &&\n error.message.startsWith('Failed to fetch dynamically imported module')\n ) {\n try {\n const response = await fetch(url)\n switch (response.status) {\n case 404:\n return `Failed to start ${displayName}: Not found (404)`\n default:\n return `Failed to start ${displayName}: Unknown Network Error`\n }\n } catch {\n return `Failed to start ${displayName}: Unknown Network Error`\n }\n }\n return `Failed to start ${displayName}: ${error}`\n }\n}\n\nconst isFirefoxError = (message) => {\n return [\n 'SyntaxError: import declarations may only appear at top level of a module',\n 'SyntaxError: export declarations may only appear at top level of a module',\n ].includes(message)\n}\n\nexport const create = async ({ url, name }) => {\n try {\n const worker = new Worker(url, {\n type: 'module',\n name,\n })\n await new Promise((resolve, reject) => {\n const cleanup = () => {\n worker.onmessage = null\n worker.onerror = null\n }\n const handleFirstMessage = (event) => {\n cleanup()\n if (event.data === 'ready') {\n resolve(undefined)\n } else {\n reject(new Error('unexpected first message from renderer worker'))\n }\n }\n const handleFirstError = async (event) => {\n cleanup()\n if (isFirefoxError(event.message)) {\n event.preventDefault()\n reject(new Error('module workers are not supported in firefox'))\n } else {\n const actualErrorMessage = await tryToGetActualErrorMessage({\n url,\n name,\n })\n reject(new Error(actualErrorMessage))\n }\n }\n worker.onmessage = handleFirstMessage\n worker.onerror = handleFirstError\n })\n let handleMessage\n\n return {\n get onmessage() {\n return handleMessage\n },\n set onmessage(listener) {\n if (listener) {\n handleMessage = (event) => {\n // TODO why are some events not instance of message event?\n if (event instanceof MessageEvent) {\n const message = event.data\n listener(message)\n } else {\n listener(event)\n }\n }\n } else {\n handleMessage = null\n }\n worker.onmessage = handleMessage\n },\n send(message) {\n worker.postMessage(message)\n },\n }\n } catch (error) {\n if (\n error &&\n error instanceof Error &&\n error.message === 'module workers are not supported in firefox'\n ) {\n const IpcParentWithMessagePort = await import(\n './IpcParentWithMessagePort.js'\n )\n return IpcParentWithMessagePort.create({ url })\n }\n throw error\n }\n}\n", "export const create = async ({ url }) => {\n const referencePort = await new Promise((resolve) => {\n globalThis.acceptReferencePort = resolve\n import(url)\n })\n delete globalThis.acceptReferencePort\n let handleMessage\n return {\n get onmessage() {\n return handleMessage\n },\n set onmessage(listener) {\n if (listener) {\n handleMessage = (event) => {\n // TODO why are some events not instance of message event?\n if (event instanceof MessageEvent) {\n const message = event.data\n listener(message)\n } else {\n listener(event)\n }\n }\n } else {\n handleMessage = null\n }\n referencePort.onmessage = handleMessage\n },\n send(message) {\n referencePort.postMessage(message)\n },\n }\n}\n", "const getWsUrl = () => {\n const wsProtocol = location.protocol === 'https:' ? 'wss:' : 'ws:'\n\n return `${wsProtocol}//${location.host}`\n}\n\nexport const create = ({ protocol }) => {\n // TODO replace this during build\n const wsUrl = getWsUrl()\n const webSocket = new WebSocket(wsUrl, [protocol])\n const pendingMessages = []\n webSocket.onopen = () => {\n ipc.send = (message) => {\n const stringifiedMessage = JSON.stringify(message)\n webSocket.send(stringifiedMessage)\n }\n for (const message of pendingMessages) {\n ipc.send(message)\n }\n pendingMessages.length = 0\n }\n let handleMessage\n const ipc = {\n get onmessage() {\n return handleMessage\n },\n set onmessage(listener) {\n if (listener) {\n handleMessage = (event) => {\n // TODO why are some events not instance of message event?\n if (event instanceof MessageEvent) {\n const message = JSON.parse(event.data)\n listener(message)\n } else {\n listener(event)\n }\n }\n } else {\n handleMessage = null\n }\n webSocket.onmessage = handleMessage\n },\n send(message) {\n pendingMessages.push(message)\n },\n }\n return ipc\n}\n", "export const Methods = {\n Electron: 1,\n MessagePort: 2,\n ModuleWorker: 3,\n ReferencePort: 4,\n WebSocket: 5,\n}\n\nconst getModule = (method) => {\n switch (method) {\n case Methods.Electron:\n return import('./IpcParentWithElectron.js')\n case Methods.MessagePort:\n return import('./IpcParentWithMessagePort.js')\n case Methods.ModuleWorker:\n return import('./IpcParentWithModuleWorker.js')\n case Methods.ReferencePort:\n return import('./IpcParentWithReferencePort.js')\n case Methods.WebSocket:\n return import('./IpcParentWithWebSocket.js')\n default:\n throw new Error('unexpected ipc type')\n }\n}\n\nexport const create = async ({ method, ...options }) => {\n const module = await getModule(method)\n return module.create(options)\n}\n", "/* istanbul ignore file */\nimport * as Callback from '../Callback/Callback.js'\nimport * as Command from '../Command/Command.js'\nimport * as JsonRpc from '../JsonRpc/JsonRpc.js'\nimport * as IpcParent from '../IpcParent/IpcParent.js'\n\n// TODO duplicate code with platform module\n/**\n * @returns {'electron'|'remote'|'web'|'test'}\n */\nconst getPlatform = () => {\n // TODO maybe use import.meta.env.PLATFORM\n // @ts-ignore\n if (typeof PLATFORM !== 'undefined') {\n // @ts-ignore\n return PLATFORM\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {\n return 'test'\n }\n if (\n typeof navigator !== 'undefined' &&\n typeof navigator.appVersion !== 'undefined' &&\n navigator.appVersion.includes('Electron')\n ) {\n return 'electron'\n }\n return 'remote'\n}\n\nconst platform = getPlatform() // TODO tree-shake this out in production\n\nconst constructError = (message) => {\n if (message.startsWith('Error: ')) {\n return new Error(message.slice('Error: '.length))\n }\n if (message.startsWith('TypeError: ')) {\n return new TypeError(message.slice('TypeError: '.length))\n }\n if (message.startsWith('SyntaxError: ')) {\n return new SyntaxError(message.slice('SyntaxError: '.length))\n }\n return new Error(message)\n}\n\nconst preparePrettyError = (rawError) => {\n const error = constructError(rawError.message)\n if (rawError.data && rawError.data.stack) {\n // @ts-ignore\n error.originalStack = rawError.data.stack\n }\n if (rawError.data && rawError.data.codeFrame) {\n // @ts-ignore\n error.originalCodeFrame = rawError.data.codeFrame\n }\n if (rawError.data && rawError.data.category) {\n // @ts-ignore\n error.category = rawError.data.category\n }\n if (rawError.data && rawError.data.stderr) {\n // @ts-ignore\n error.stderr = rawError.data.stderr\n }\n return error\n}\n\nexport const state = {\n /**\n * @type {any}\n */\n ipc: undefined,\n}\n\nexport const handleMessageFromSharedProcess = async (message) => {\n if (message.method) {\n const result = await Command.execute(message.method, ...message.params)\n if (message.id) {\n state.send({\n jsonrpc: '2.0',\n id: message.id,\n result,\n })\n }\n } else {\n Callback.resolve(message.id, message)\n }\n}\n\nconst getIpc = () => {\n switch (platform) {\n case 'web':\n case 'remote':\n return IpcParent.create({\n method: IpcParent.Methods.WebSocket,\n protocol: 'lvce.shared-process',\n })\n case 'electron':\n return IpcParent.create({\n method: IpcParent.Methods.Electron,\n type: 'shared-process',\n })\n default:\n throw new Error('unsupported platform')\n }\n}\n\nexport const listen = async () => {\n const ipc = await getIpc()\n ipc.onmessage = handleMessageFromSharedProcess\n state.ipc = ipc\n}\n\nexport const send = (method, ...params) => {\n if (platform === 'web') {\n console.warn('SharedProcess is not available on web')\n return\n }\n JsonRpc.send(state.ipc, method, ...params)\n}\n\nexport const invoke = async (method, ...params) => {\n if (platform === 'web') {\n console.warn('SharedProcess is not available on web')\n return\n }\n const responseMessage = await JsonRpc.invoke(state.ipc, method, ...params)\n if (responseMessage.error) {\n const prettyError = preparePrettyError(responseMessage.error)\n throw prettyError\n }\n return responseMessage.result\n}\n\nexport const dispose = () => {\n state.dispose()\n}\n\n// TODO when shared process crashes / connection is lost: reconnect or show notification\n", "export const Web = 'web'\n\nexport const Electron = 'electron'\n\nexport const Remote = 'remote'\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n/* istanbul ignore file */\n\n// TODO this should always be completely tree shaken out during build, maybe need to be marked as @__Pure for terser to work\n\n// TODO treeshake this function out when targeting electron\n\nexport const isMobileOrTablet = () => {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {\n return false\n }\n // @ts-ignore\n const userAgentData = navigator.userAgentData\n if (userAgentData && userAgentData.mobile === true) {\n return true\n }\n // copied from https://stackoverflow.com/questions/11381673/detecting-a-mobile-browser\n let check = false\n ;(function (a) {\n if (\n /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(\n a\n ) ||\n /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[23]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(\n a.slice(0, 4)\n )\n ) {\n check = true\n }\n // @ts-ignore\n })(navigator.userAgent || navigator.vendor || window.opera)\n return check\n}\n\nexport const getExtensionsPath = () => {\n return SharedProcess.invoke(\n /* Platform.getExtensionsPath */ 'Platform.getExtensionsPath'\n )\n}\n\nexport const getBuiltinExtensionsPath = () => {\n return SharedProcess.invoke(\n /* Platform.getBuiltinExtensionsPath */ 'Platform.getBuiltinExtensionsPath'\n )\n}\n\nexport const getDisabledExtensionsPath = () => {\n return SharedProcess.invoke(\n /* Platform.getDisabledExtensionsPath */ 'Platform.getDisabledExtensionsPath'\n )\n}\n\nexport const getCachedExtensionsPath = () => {\n return SharedProcess.invoke(\n /* Platform.getCachedExtensionsPath */ 'Platform.getCachedExtensionsPath'\n )\n}\n\nexport const getMarketPlaceUrl = () => {\n // TODO this should be configurable via settings\n // TODO in web this should be static\n return SharedProcess.invoke(\n /* Platform.getMarketPlaceUrl */ 'Platform.getMarketplaceUrl'\n )\n}\n\nexport const getLogsDir = () => {\n return SharedProcess.invoke(/* Platform.getLogsDir */ 'Platform.getLogsDir')\n}\n\nexport const getUserSettingsPath = () => {\n if (getPlatform() === PlatformType.Web) {\n return 'settings'\n }\n return SharedProcess.invoke(\n /* Platform.getUserSettingsPath */ 'Platform.getUserSettingsPath'\n )\n}\n\n/**\n * @returns {'electron'|'remote'|'web'|'test'}\n */\nconst getPlatform = () => {\n // @ts-ignore\n if (typeof 'remote' !== 'undefined') {\n // @ts-ignore\n return 'remote'\n }\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') {\n return 'test'\n }\n\n // TODO don't use window here -> want to run renderer-worker as webworker\n if (\n typeof navigator !== 'undefined' &&\n typeof navigator.appVersion !== 'undefined' &&\n navigator.appVersion.includes('Electron')\n ) {\n return PlatformType.Electron\n }\n return PlatformType.Remote\n}\n\nexport const platform = getPlatform()\n\nexport const getAssetDir = () => {\n // @ts-ignore\n if (typeof '/db64c60' !== 'undefined') {\n // @ts-ignore\n return '/db64c60'\n }\n if (getPlatform() === PlatformType.Electron) {\n return '../../../../..'\n }\n return ''\n}\n\nexport const getRecentlyOpenedPath = () => {\n if (getPlatform() === PlatformType.Web) {\n return 'recently-opened'\n }\n return SharedProcess.invoke(\n /* Platform.getRecentlyOpenedPath */ 'Platform.getRecentlyOpenedPath'\n )\n}\n\nexport const getConfigPath = () => {\n return SharedProcess.invoke(\n /* Platform.getConfigDir */ 'Platform.getConfigDir'\n )\n}\n\nexport const getCachePath = () => {\n return SharedProcess.invoke(/* Platform.getCacheDir */ 'Platform.getCacheDir')\n}\n\nexport const getExtensionHostWorkerUrl = () => {\n return '/packages/extension-host-worker/src/extensionHostWorkerMain.js'\n}\n\nexport const getGithubApiUrl = () => {\n return `https://api.github.com`\n}\n\nexport const getCacheName = () => {\n return 'lvce-runtime'\n}\n\nexport const getTestPath = () => {\n return SharedProcess.invoke(/* Platform.getTestPath */ 'Platform.getTestPath')\n}\n\nexport const getNodePath = () => {\n return SharedProcess.invoke(/* Platform.getNodePath */ 'Platform.getNodePath')\n}\n\nexport const getTmpDir = () => {\n return SharedProcess.invoke(/* Platform.getTmpDir */ 'Platform.getTmpDir')\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport { VError } from '../VError/VError.js'\n\nconst shouldIgnoreError = (error) => {\n // Firefox throws dom exception in private mode\n return (\n error &&\n error instanceof DOMException &&\n error.message === 'The operation is insecure.'\n )\n}\n\n// TODO when caches is not defined -> should return undefined\n\nconst getCache = async () => {\n const cacheName = Platform.getCacheName()\n return await caches.open(cacheName)\n}\n\nconst getResponse = async (key) => {\n if (typeof caches === 'undefined') {\n return undefined\n }\n if (Platform.platform === 'electron' && key.startsWith('/')) {\n // workaround for custom protocol not working with cache storage\n key = 'https://example.com' + key\n }\n const cache = await getCache()\n const response = await cache.match(key)\n return response\n}\n\nexport const getJson = async (key) => {\n try {\n const response = await getResponse(key)\n if (!response) {\n return undefined\n }\n const json = await response.json()\n return json\n } catch (error) {\n if (shouldIgnoreError(error)) {\n return undefined\n }\n throw new VError(error, `Failed to get json from cache \"${key}\"`)\n }\n}\n\nexport const getTextFromCache = async (key) => {\n try {\n const response = await getResponse(key)\n if (!response) {\n return undefined\n }\n const text = await response.text()\n return text\n } catch (error) {\n if (shouldIgnoreError(error)) {\n return undefined\n }\n throw new VError(error, `Failed to get text from cache \"${key}\"`)\n }\n}\n\nconst setResponse = async (key, value, contentType) => {\n if (typeof caches === 'undefined') {\n return\n }\n // TODO cache the cache (maybe)\n if (\n Platform.platform === 'electron' && // workaround for custom protocol not working with cache storage\n key.startsWith('/')\n ) {\n key = 'https://example.com' + key\n }\n if (typeof value !== 'string') {\n console.warn(`invalid value ${value}`)\n return\n }\n const cacheName = Platform.getCacheName()\n const cache = await caches.open(cacheName)\n await cache.put(\n key,\n new Response(value, {\n headers: new Headers({\n 'Content-Type': contentType,\n 'Content-Length': `${value.length}`,\n }),\n })\n )\n}\n\nexport const setText = async (key, value, contentType) => {\n try {\n await setResponse(key, value, contentType)\n } catch (error) {\n if (shouldIgnoreError(error)) {\n return undefined\n }\n throw new VError(error, `Failed to put item into cache \"${key}\"`)\n }\n}\n\nexport const setJson = async (key, value) => {\n try {\n await setResponse(key, JSON.stringify(value), 'application/json')\n } catch (error) {\n if (shouldIgnoreError(error)) {\n return\n }\n throw new VError(error, `Failed to put json into cache \"${key}\"`)\n }\n}\n\nexport const clearCache = async () => {\n if (typeof caches === 'undefined') {\n return\n }\n try {\n const cacheName = Platform.getCacheName()\n await caches.delete(cacheName)\n } catch (error) {\n if (shouldIgnoreError(error)) {\n return\n }\n throw new VError(error, 'Failed to clear cache')\n }\n}\n", "import * as CacheStorage from './CacheStorage.js'\n\n// TODO only use CacheStorage module via ipc -> that way is is always lazyloaded\n\nexport const Commands = {\n 'CacheStorage.clearCache': CacheStorage.clearCache,\n 'CacheStorage.getJson': CacheStorage.getJson,\n 'CacheStorage.setJson': CacheStorage.setJson,\n}\n", "import * as Callback from './Callback.js'\n\nexport const Commands = {\n 'Callback.reject': Callback.reject,\n 'Callback.resolve': Callback.resolve,\n}\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport { VError } from '../VError/VError.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const readText = async () => {\n try {\n return await RendererProcess.invoke('ClipBoard.readText')\n } catch (error) {\n // @ts-ignore\n if (error.message === 'Read permission denied.') {\n throw new VError(\n 'Failed to read text from clipboard: The Browser disallowed reading from clipboard'\n )\n }\n if (\n // @ts-ignore\n error.message === 'navigator.clipboard.readText is not a function'\n ) {\n throw new VError(\n 'Failed to read text from clipboard: The Clipboard Api is not available in Firefox'\n )\n }\n throw new VError(error, 'Failed to read text from clipboard')\n }\n}\n\nexport const writeText = async (text) => {\n try {\n Assert.string(text)\n await RendererProcess.invoke('ClipBoard.writeText', /* text */ text)\n } catch (error) {\n throw new VError(error, 'Failed to write text to clipboard')\n }\n}\n\nexport const writeNativeFiles = async (type, files) => {\n try {\n await SharedProcess.invoke(\n /* command */ 'ClipBoard.writeFiles',\n /* type */ type,\n /* files */ files\n )\n } catch (error) {\n throw new VError(error, 'Failed to write files to native clipboard')\n }\n}\n\nexport const readNativeFiles = async () => {\n try {\n return await SharedProcess.invoke(/* command */ 'ClipBoard.readFiles')\n } catch (error) {\n throw new VError(error, 'Failed to read files from native clipboard')\n }\n}\n", "import * as ClipBoard from './ClipBoard.js'\n\nexport const Commands = {\n 'ClipBoard.readNativeFiles': ClipBoard.readNativeFiles,\n 'ClipBoard.readText': ClipBoard.readText,\n 'ClipBoard.writeNativeFiles': ClipBoard.writeNativeFiles,\n 'ClipBoard.writeText': ClipBoard.writeText,\n}\n", "export const open = () => {\n console.log('TODO open color picker')\n}\n\nexport const close = () => {\n console.log('TODO close color picker')\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ColorPicker from './ColorPicker.js'\n\nexport const Commands = {\n 'ColorPicker.close': ColorPicker.close,\n 'ColorPicker.open': ColorPicker.open,\n}\n", "import * as ColorTheme from './ColorTheme.js'\n\nexport const Commands = {\n 'ColorTheme.hydrate': ColorTheme.hydrate,\n 'ColorTheme.setColorTheme': ColorTheme.setColorTheme,\n}\n", "const rgba = (r, g, b, a) => {\n r = Math.min(255, Math.max(0, r)) | 0\n g = Math.min(255, Math.max(0, g)) | 0\n b = Math.min(255, Math.max(0, b)) | 0\n return {\n r,\n g,\n b,\n a,\n }\n}\n\nconst darken = () => {}\n\nconst lighten = () => {}\n\nconst transparent = (color, factor) => {\n return color\n}\n\nconst isValidHexColor = (value) => {\n return true\n}\n\nconst toColorRule = ([key, value]) => {\n return ` --${key}: ${value};`\n}\n\nconst toTokenColorRule = (tokenColor) => {\n return `.Token.${tokenColor.name} { color: ${tokenColor.foreground} }`\n}\n\nexport const createColorThemeFromJson = (colorThemeId, colorThemeJson) => {\n if (!colorThemeJson) {\n console.warn(\n `color theme json for \"${colorThemeId}\" is empty: \"${colorThemeJson}\"`\n )\n return ''\n }\n if (typeof colorThemeJson !== 'object') {\n console.warn(\n `color theme json for \"${colorThemeId}\" cannot be converted to css: \"${colorThemeJson}\"`\n )\n return ''\n }\n if (Array.isArray(colorThemeJson)) {\n console.warn(\n `color theme json for \"${colorThemeId}\" cannot be converted to css, it must be of type object but was of type array`\n )\n return ''\n }\n const colors = colorThemeJson.colors\n if (!colors) {\n return ''\n }\n if (!colors.ActivityBarInactiveForeground) {\n // TODO don't assign, avoid mutation\n colors.ActivityBarInactiveForeground = transparent(\n colors.ActivityBarForeground,\n 0.4\n )\n }\n const colorRules = Object.entries(colors).map(toColorRule)\n const tokenColors = colorThemeJson.tokenColors || []\n const tokenColorRules = tokenColors.map(toTokenColorRule)\n const extraRules = []\n if (colors.ContrastBorder) {\n console.log('has contrast border')\n extraRules.push(`#ActivityBar, #SideBar {\n border-left: 1px solid var(--ContrastBorder);\n}`, `#Panel {\n border-top: 1px solid var(--ContrastBorder);\n}`, `#StatusBar {\n border-top: 1px solid var(--ContrastBorder);\n}`, `.ActivityBarItemBadge {\n border: 1px solid var(--ContrastBorder);\n}`, `#QuickPick {\n border: 1px solid var(--ContrastBorder);\n}`)\n }\n const colorThemeCss = `:root {\\n${colorRules.join(\n '\\n'\n )}\\n}\\n\\n${tokenColorRules.join('\\n')}\\n\\n${extraRules.join('\\n')}`\n return colorThemeCss\n}\n\n// for (let i = 0; i < 10000; i++) {\n// createColorThemeFromJson({\n// type: 'dark',\n// colors: {\n// ActivityBarBackground: 'rgb(40, 46, 47)',\n// ActivityBarForeground: '#878f8c',\n// ActivityBarActiveBackground: '#1f2727',\n\n// EditorBackGround: '#1e2324',\n// EditorScrollBarBackground: 'rgba(57, 71, 71, 0.6)',\n// EditorCursorBackground: '#a8df5a',\n\n// ListActiveSelectionBackground: '#515f59',\n// ListActiveSelectionForeground: '#ffffff',\n// ListHoverBackground: '#405c5033',\n// ListHoverForeground: '#e0e0e0',\n// ListInactiveSelectionBackground: '#3b474280',\n\n// MainBackground: '#1e2324',\n\n// PanelBackground: '#1b2020',\n// PanelBorderTopColor: 'rgba(128, 128, 128, 0.35)',\n\n// SideBarBackground: '#1b2020',\n\n// StatusBarBackground: 'rgb(40, 46, 47)',\n// StatusBarBorderTopColor: '#222222',\n\n// TabActiveBackground: '#24292a',\n// TabInactiveBackground: '#282e2f',\n\n// TitleBarBackground: 'rgb(40, 46, 47)',\n// TitleBarBorderBottomColor: '#222',\n// TitleBarColor: '#cccccc',\n// TitleBarColorInactive: 'rgba(204, 204, 204, 0.6)',\n// },\n// }) //?.\n// }\n", "import * as ColorThemeFromJson from './ColorThemeFromJson.js'\n\n// prettier-ignore\nexport const Commands = {\n 'ColorThemeFromJson.createColorThemeFromJson': ColorThemeFromJson.createColorThemeFromJson\n}\n", "import * as Callback from '../Callback/Callback.js'\nimport { JsonRpcError } from '../Errors/Errors.js'\nimport * as IpcParent from '../IpcParent/IpcParent.js'\nimport * as JsonRpc from '../JsonRpc/JsonRpc.js'\n\nexport const state = {\n /**\n * @type {any}\n */\n ipc: undefined,\n}\n\nconst createIpc = async () => {\n return IpcParent.create({\n method: IpcParent.Methods.Electron,\n type: 'electron-process',\n })\n}\n\nconst handleMessage = (message) => {\n if ('id' in message) {\n Callback.resolve(message.id, message)\n }\n}\n\n// TODO race condition\nconst getIpc = async () => {\n if (!state.ipc) {\n const ipc = await createIpc()\n ipc.onmessage = handleMessage\n state.ipc = ipc\n }\n return state.ipc\n}\n\nconst restoreError = (error) => {\n if (error instanceof Error) {\n return error\n }\n if (error.code && error.code === -32601) {\n console.log('create json rpc error')\n const restoredError = new JsonRpcError(error.message)\n restoredError.stack = error.stack\n return restoredError\n }\n const restoredError = new Error(error.message)\n if (error.data) {\n if (error.data.stack) {\n restoredError.stack = error.data.stack\n }\n if (error.data.codeFrame) {\n // @ts-ignore\n restoredError.codeFrame = error.data.codeFrame\n }\n }\n return restoredError\n}\n\nexport const invoke = async (method, ...params) => {\n const ipc = await getIpc()\n const response = await JsonRpc.invoke(ipc, method, ...params)\n if ('result' in response) {\n return response.result\n }\n if ('error' in response) {\n const restoredError = restoreError(response.error)\n throw restoredError\n }\n throw new Error('unexpected response')\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const startRecording = (options) => {\n return ElectronProcess.invoke(\n 'ElectronContentTracing.startRecording',\n options\n )\n}\n\n/**\n * @returns {Promise<string>}\n */\nexport const stopRecording = () => {\n return ElectronProcess.invoke('ElectronContentTracing.stopRecording')\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const showItemInFolder = async (fullPath) => {\n await ElectronProcess.invoke('ElectronShell.showItemInFolder', fullPath)\n}\n\nexport const beep = async () => {\n await ElectronProcess.invoke('ElectronShell.beep')\n}\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport { VError } from '../VError/VError.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\nimport * as ElectronShell from '../ElectronShell/ElectronShell.js'\n\nconst openNativeFolderWeb = (absolutePath) => {\n throw new Error('not implemented')\n}\n\nconst openNativeFolderRemote = async (absolutePath) => {\n try {\n await SharedProcess.invoke(\n /* Native.openFolder */ 'Native.openFolder',\n /* path */ absolutePath\n )\n } catch (error) {\n throw new VError(error, `Failed to open folder ${absolutePath}`)\n }\n}\n\nconst openNativeFolderElectron = async (absolutePath) => {\n await ElectronShell.showItemInFolder(absolutePath)\n}\n\nexport const openNativeFolder = async (absolutePath) => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return openNativeFolderWeb(absolutePath)\n case PlatformType.Remote:\n return openNativeFolderRemote(absolutePath)\n case PlatformType.Electron:\n return openNativeFolderElectron(absolutePath)\n default:\n return\n }\n}\n", "import * as ElectronContentTracing from '../ElectronContentTracing/ElectronContentTracing.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\nimport * as OpenNativeFolder from '../OpenNativeFolder/OpenNativeFolder.js'\n\nexport const start = async () => {\n if (Platform.platform !== PlatformType.Electron) {\n throw new Error('content tracing is only supported in electron')\n }\n await ElectronContentTracing.startRecording({\n included_categories: ['*'],\n })\n}\n\nexport const stop = async () => {\n if (Platform.platform !== PlatformType.Electron) {\n throw new Error('content tracing is only supported in electron')\n }\n const path = await ElectronContentTracing.stopRecording()\n await OpenNativeFolder.openNativeFolder(path)\n // console.log({ path })\n}\n", "import * as Tracing from './ContentTracing.js'\n\nexport const Commands = {\n 'ContentTracing.start': Tracing.start,\n 'ContentTracing.stop': Tracing.stop,\n}\n", "// TODO global event bus is probably a bad idea\n// cons:\n// 1. it is not typesafe\n// 2. dependencies are unclear\n//\n// pros\n// 1. it decouples event emitter (e.g. Editor creation) from other module (Document syncing when editor was created)\n\nexport const state = {\n listenerMap: Object.create(null),\n}\n\nexport const emitEvent = async (event, ...args) => {\n const listeners = state.listenerMap[event] || []\n for (const listener of listeners) {\n await listener(...args)\n }\n}\n\nexport const addListener = (event, fn) => {\n state.listenerMap[event] ||= []\n if (state.listenerMap[event].includes(fn)) {\n return\n }\n state.listenerMap[event].push(fn)\n}\n\nexport const removeListener = (event, fn) => {\n const listeners = state.listenerMap[event]\n if (!listeners) {\n console.info(\n `[info] listener for event ${event} is not registered and cannot be unregistered`\n )\n return\n }\n const index = listeners.indexOf(fn)\n listeners.splice(index, 1)\n if (listeners.length === 0) {\n delete state.listenerMap[event]\n }\n}\n", "export class CancelationError extends Error {\n constructor() {\n super('canceled')\n this.name = 'CancelationError'\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\n\nexport const state = {\n instances: Object.create(null),\n}\n\nexport const set = (key, value) => {\n Assert.object(value)\n Assert.object(value.factory)\n Assert.object(value.state)\n state.instances[key] = value\n}\n\nexport const getInstance = (key) => {\n return state.instances[key]\n}\n\nexport const hasInstance = (key) => {\n return key in state.instances\n}\n\nexport const remove = (key) => {\n delete state.instances[key]\n}\n\nexport const getAllInstances = () => {\n return state.instances\n}\n\nexport const getState = (key) => {\n const instance = getInstance(key)\n return instance.state\n}\n\nexport const setState = (key, newState) => {\n const instance = getInstance(key)\n instance.state = newState\n}\n\nexport const reset = () => {\n state.instances = Object.create(null)\n}\n", "export const ActivityBar = 'ActivityBar'\n\nexport const Clock = 'Clock'\n\nexport const DebugConsole = 'Debug Console'\n\nexport const EditorCompletion = 'EditorCompletion'\n\nexport const EditorImage = 'EditorImage'\n\nexport const EditorPlainText = 'EditorPlainText'\n\nexport const EditorText = 'EditorText'\n\nexport const Explorer = 'Explorer'\n\nexport const Extensions = 'Extensions'\n\nexport const Implementations = 'Implementations'\n\nexport const Main = 'Main'\n\nexport const Noop = 'Noop'\n\nexport const Output = 'Output'\n\nexport const Panel = 'Panel'\n\nexport const Problems = 'Problems'\n\nexport const QuickPick = 'QuickPick'\n\nexport const References = 'References'\n\nexport const RunAndDebug = 'RunAndDebug'\n\nexport const Search = 'Search'\n\nexport const SideBar = 'SideBar'\n\nexport const SourceControl = 'Source Control'\n\nexport const StatusBar = 'StatusBar'\n\nexport const Terminal = 'Terminal'\n\nexport const TitleBar = 'TitleBar'\n", "export const File = 'file'\n\nexport const Directory = 'directory'\n\nexport const DirectoryExpanding = 'directory-expanding'\n\nexport const DirectoryExpanded = 'directory-expanded'\n\nexport const Symlink = 'symlink'\n\nexport const Socket = 'socket'\n\nexport const BlockDevice = 'block-device'\n\nexport const CharacterDevice = 'character-device'\n\nexport const Unknown = 'unknown'\n", "import * as Command from '../Command/Command.js'\n\n// TODO use https://github.com/stack-tools-js/stack-tools to print error\n\nconst enhanceErrorMessage = (error) => {\n if (!error) {\n return {\n message: `Error: ${error}`,\n stack: undefined,\n codeFrame: undefined,\n }\n }\n let message = `${error}`\n while (error.cause) {\n error = error.cause\n message += `: ${error}`\n }\n console.log({ error })\n return {\n message,\n stack: error.originalStack,\n codeFrame: error.originalCodeFrame,\n category: error.category,\n stderr: error.stderr,\n }\n}\n\n// const getErrorMessage = (error) => {\n// let message = ``\n// if (error && error.message) {\n// message += error.message\n// }\n// if (error && error.stack) {\n// message += `\\n${error.stack}`\n// }\n// if (error && error.cause) {\n// message += getErrorMessage(error.cause)\n// }\n// return message\n// }\n\n// const printError = (error) => {\n// const message = getErrorMessage(error)\n// console.error(message)\n// }\n\nexport const printError = (error) => {\n if (error && error.message && error.codeFrame) {\n console.error(`${error.message}\\n\\n${error.codeFrame}\\n\\n${error.stack}`)\n } else {\n console.error(error)\n if (error && error.cause) {\n console.error('caused by')\n printError(error.cause)\n }\n }\n}\n\nexport const state = {\n /**\n * @type {string[]}\n */\n seenWarnings: [],\n}\n\nexport const handleError = async (error) => {\n try {\n printError(error)\n const enhancedErrorMessage = enhanceErrorMessage(error)\n await Command.execute(\n /* Notification.create */ 'Notification.create',\n /* type */ 'error',\n /* text */ enhancedErrorMessage.message\n )\n } catch {\n // ignore\n }\n}\n\nexport const showErrorDialog = async (error) => {\n try {\n const enhancedErrorMessage = enhanceErrorMessage(error)\n await Command.execute(\n /* Dialog.showMessage */ 'Dialog.showMessage',\n /* message */ enhancedErrorMessage\n )\n } catch {\n // ignore\n }\n}\n\nexport const warn = (...args) => {\n const stringified = JSON.stringify(args)\n if (state.seenWarnings.includes(stringified)) {\n return\n }\n state.seenWarnings.push(stringified)\n console.warn(...args)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nconst getLanguagesFromExtensionHost = async () => {\n // TODO handle error\n const languages = await SharedProcess.invoke(\n /* ExtensionHost.getLanguages */ 'ExtensionHost.getLanguages'\n )\n return languages\n}\n\nconst getLanguagesFromStaticFolder = async () => {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/config/languages.json`\n // TODO handle error ?\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n}\n\nexport const getLanguages = () => {\n if (Platform.platform === PlatformType.Web) {\n return getLanguagesFromStaticFolder()\n }\n return getLanguagesFromExtensionHost()\n}\n\nexport const getLanguageConfiguration = async (languageId) => {\n if (Platform.platform === PlatformType.Web) {\n console.warn('get language configuration not yet supported on web')\n return\n }\n const languageConfiguration = await SharedProcess.invoke(\n /* ExtensionHost.getLanguageConfiguration */ 'ExtensionHost.getLanguageConfiguration',\n /* languageId */ languageId\n )\n return languageConfiguration\n}\n", "// TODO merge all of this with extension host languages module\n\nimport * as Assert from '../Assert/Assert.js'\nimport * as ExtensionHostLanguages from '../ExtensionHost/ExtensionHostLanguages.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\n\nexport const state = {\n loadState: false,\n isHydrating: false,\n fileNameMap: Object.create(null),\n extensionMap: Object.create(null),\n tokenizerMap: Object.create(null),\n}\n\nexport const getLanguageId = (fileName) => {\n Assert.string(fileName)\n // TODO this is inefficient for icon theme, as file extension is computed twice\n const extension = fileName.slice(fileName.lastIndexOf('.'))\n const fileNameLower = fileName.toLowerCase()\n const { extensionMap, fileNameMap } = state\n if (extensionMap[extension]) {\n return extensionMap[extension]\n }\n if (fileNameMap[fileNameLower]) {\n return fileNameMap[fileNameLower]\n }\n return 'unknown'\n}\n\nexport const getTokenizeFunctionPath = (languageId) => {\n // TODO what if language.tokenize is not of type string? -> handle error gracefully\n return state.tokenizerMap[languageId] || ''\n}\n\nconst getLanguages = () => {\n // TODO handle error\n\n return ExtensionHostLanguages.getLanguages()\n}\n\nexport const hydrate = async () => {\n state.isHydrating = true\n // TODO handle error\n // TODO main parts should have nothing todo with shared process -> only sub components\n const languages = await getLanguages()\n // TODO avoid side effect here, but how?\n await addLanguages(languages)\n state.loaded = true\n}\n\n// TODO make contribution points not rely on globals and side effects\nconst contributionPointFileExtensions = {\n key: 'fileExtensions',\n handle(value, languageId) {\n if (value) {\n console.warn(\n `[renderer-worker] unsupported property \"fileExtensions\" for language ${language.id}, use the property \"extensions\" instead`\n )\n }\n },\n}\n\nconst contributionPointFileNames = {\n key: 'fileNames',\n handle(value, languageId) {\n if (value && Array.isArray(value)) {\n for (const fileName of value) {\n if (typeof fileName === 'string') {\n const fileNameLower = fileName.toLowerCase()\n state.fileNameMap[fileNameLower] = languageId\n } else {\n console.warn(\n `[renderer-worker] language.fileNames for ${languageId} should be an array of strings but includes ${typeof fileName}`\n )\n }\n }\n state.fileNameMap\n }\n },\n}\n\nconst contributionPointExtensions = {\n key: 'extensions',\n handle(value, languageId) {\n if (value && Array.isArray(value)) {\n for (const extension of value) {\n if (typeof extension === 'string') {\n state.extensionMap[extension] = languageId\n } else {\n console.warn(\n `[renderer-worker] language.extensions for ${languageId} should be an array of strings but includes ${typeof extension}`\n )\n }\n }\n }\n },\n}\n\nconst contributionPointTokenize = {\n key: 'tokenize',\n handle(value, languageId) {\n if (value) {\n state.tokenizerMap[languageId] = value\n }\n },\n}\n\nconst contributionPoints = [\n contributionPointFileExtensions,\n contributionPointExtensions,\n contributionPointFileNames,\n contributionPointTokenize,\n]\n\nconst addLanguage = (language) => {\n const languageId = language.id\n if (!languageId) {\n console.warn(`[renderer-worker] language is missing id`, language)\n return\n }\n // TODO could use object destructuing here\n for (const contributionPoint of contributionPoints) {\n const value = language[contributionPoint.key]\n contributionPoint.handle(value, languageId)\n }\n}\n\nexport const addLanguages = async (languages) => {\n for (const language of languages) {\n addLanguage(language)\n }\n await GlobalEventBus.emitEvent('languages.changed')\n}\n\nexport const hasLoaded = () => {\n return state.loaded\n}\n\nexport const waitForLoad = async () => {\n if (state.isHydrating) {\n await new Promise((resolve) => {\n const handleLanguageChange = (editor, languageId) => {\n resolve(undefined)\n }\n // TODO remove event listener when promise is resolved\n // TODO what if this event is never emitted (e.g. languages fail to load)\n GlobalEventBus.addListener('languages.changed', handleLanguageChange)\n })\n } else {\n await hydrate()\n }\n}\n\nexport const getLanguageConfiguration = async (editor) => {\n if (!hasLoaded()) {\n throw new Error(\n 'languages must be loaded before requesting language configuration'\n )\n }\n editor.languageId = getLanguageId(editor.uri)\n const languageConfiguration = ExtensionHostLanguages.getLanguageConfiguration(\n editor.languageId\n )\n return languageConfiguration\n}\n", "export const Resolved = 'resolved'\n\nexport const Rejected = 'rejected'\n", "import * as Platform from '../Platform/Platform.js'\nimport * as Command from '../Command/Command.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport { VError } from '../VError/VError.js'\nimport * as ExtensionManifestStatus from '../ExtensionManifestStatus/ExtensionManifestStatus.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const state = {\n /**\n * @type {any[]}\n */\n webExtensions: [],\n}\n\nconst getId = (path) => {\n const slashIndex = path.lastIndexOf('/')\n return path.slice(slashIndex + 1)\n}\n\nconst getWebExtensionManifest = async (path) => {\n try {\n const manifestPath = `${path}/extension.json`\n const manifest = await Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ manifestPath\n )\n return {\n ...manifest,\n path,\n }\n } catch (error) {\n const id = getId(path)\n throw new VError(error, `Failed to load extension manifest for ${id}`)\n }\n}\n\nexport const addWebExtension = async (path) => {\n const manifest = await getWebExtensionManifest(path)\n // TODO avoid side effect here\n if (manifest.languages) {\n for (const language of manifest.languages) {\n if (language.tokenize) {\n language.tokenize = manifest.path + '/' + language.tokenize\n }\n }\n }\n manifest.status = ExtensionManifestStatus.Resolved\n state.webExtensions.push(manifest)\n if (manifest.languages) {\n // TODO handle case when languages is not of type array\n await Languages.addLanguages(manifest.languages)\n }\n}\n\nconst getSharedProcessExtensions = () => {\n return SharedProcess.invoke(\n /* ExtensionManagement.getExtensions */ 'ExtensionManagement.getExtensions'\n )\n}\n\n// TODO status fulfilled should be handled as resolved\nexport const organizeExtensions = (extensions) => {\n const rejected = []\n const resolved = []\n for (const extension of extensions) {\n switch (extension.status) {\n case ExtensionManifestStatus.Resolved:\n resolved.push(extension)\n break\n case ExtensionManifestStatus.Rejected:\n rejected.push(extension)\n break\n default:\n break\n }\n }\n return {\n resolved,\n rejected,\n }\n}\n\nexport const filterByMatchingEvent = (extensions, event) => {\n const extensionsToActivate = []\n for (const extension of extensions) {\n // TODO handle error when extension.activation is not of type array (null or number or ...)\n if (extension.activation && extension.activation.includes(event)) {\n extensionsToActivate.push(extension)\n }\n }\n return extensionsToActivate\n}\n\nconst getCodeFrameFromError = (error) => {\n if (error && error.jse_cause && error.jse_cause.codeFrame) {\n return error.jse_cause.codeFrame\n }\n return ''\n}\n\nconst getOriginalStackFromError = (error) => {\n if (error && error.originalStack) {\n return error.originalStack\n }\n return ''\n}\n\nconst handleRejectedExtension = async (extension) => {\n const message = extension.reason.message\n if (\n message.includes(`Failed to load extension manifest: File not found`) ||\n message.includes(`Failed to load extension manifest: ENOTDIR`)\n ) {\n return\n }\n const codeFrame = getCodeFrameFromError(extension.reason)\n const stack = getOriginalStackFromError(extension.reason)\n await Command.execute(\n /* Dialog.showMessage */ 'Dialog.showMessage',\n /* error */ { message, codeFrame, stack }\n )\n}\n\nexport const handleRejectedExtensions = async (extensions) => {\n for (const extension of extensions) {\n await handleRejectedExtension(extension)\n }\n}\n\nexport const getExtensions = async () => {\n if (Platform.platform === PlatformType.Web) {\n return state.webExtensions\n }\n if (Platform.platform === PlatformType.Remote) {\n const sharedProcessExtensions = await getSharedProcessExtensions()\n return [...sharedProcessExtensions, ...state.webExtensions]\n }\n const extensions = await getSharedProcessExtensions()\n return extensions\n}\n\nexport const addNodeExtension = async (path) => {\n // TODO add support for dynamically loading node extensions\n // e.g. for testing multiple extensions\n throw new Error('not implemented')\n}\n", "// based on https://github.com/microsoft/vscode/blob/c0769274fa136b45799edeccc0d0a2f645b75caf/src/vs/base/common/arrays.ts#L625 (License MIT)\n\nexport const insertInto = (array, start, newItems) => {\n const originalLength = array.length\n const newItemsLength = newItems.length\n array.length = originalLength + newItemsLength\n // Move the items after the start index, start from the end so that we don't overwrite any value.\n for (let i = originalLength - 1; i >= start; i--) {\n array[i + newItemsLength] = array[i]\n }\n\n for (let i = 0; i < newItemsLength; i++) {\n array[i + start] = newItems[i]\n }\n}\n\n/**\n * Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n */\nexport const splice = (array, start, deleteCount, newItems) => {\n const result = array.splice(start, deleteCount)\n insertInto(array, start, newItems)\n return result\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Arrays from '../Arrays/Arrays.js'\n\nexport const create = (text) => {\n const lines = text.split('\\n')\n const state = {\n lines,\n }\n // TODO send to shared process somehow\n return state\n}\n\n// TODO have function for single edit (most common, avoid one array)\nexport const applyEdits = (textDocument, changes) => {\n Assert.object(textDocument)\n Assert.array(changes)\n // TODO don't copy all lines (can be expensive, e.g. 10000 lines = 10000 * 64bit = 64kB on every keystroke)\n const newLines = [...textDocument.lines]\n for (const change of changes) {\n const startRowIndex = change.start.rowIndex\n const endRowIndex = change.end.rowIndex\n const startColumnIndex = change.start.columnIndex\n const endColumnIndex = change.end.columnIndex\n const inserted = change.inserted\n const deleted = change.deleted\n Assert.number(startRowIndex)\n Assert.number(endRowIndex)\n Assert.number(startColumnIndex)\n Assert.number(endColumnIndex)\n Assert.array(inserted)\n Assert.array(deleted)\n if (startRowIndex === endRowIndex) {\n if (inserted.length === 0) {\n const line = newLines[startRowIndex]\n const before = line.slice(0, startColumnIndex)\n const after = line.slice(endColumnIndex)\n newLines[startRowIndex] = before + after\n } else if (inserted.length === 1) {\n const line = newLines[startRowIndex]\n let before = line.slice(0, startColumnIndex)\n if (startColumnIndex > line.length) {\n before += ' '.repeat(startColumnIndex - line.length)\n }\n const after = line.slice(endColumnIndex)\n const text = inserted[0]\n newLines[startRowIndex] = before + text + after\n } else {\n const line = newLines[startRowIndex]\n const before = line.slice(0, startColumnIndex) + inserted[0]\n const after = inserted.at(-1) + line.slice(endColumnIndex)\n Arrays.splice(newLines, startRowIndex, deleted.length, [\n before,\n ...inserted.slice(1, -1),\n after,\n ])\n // TODO only do this once after all edits, not inside loop\n textDocument.maxLineY = Math.min(\n textDocument.numberOfVisibleLines,\n newLines.length\n )\n }\n } else {\n if (inserted.length === 1) {\n const before =\n newLines[startRowIndex].slice(0, startColumnIndex) + inserted[0]\n const after =\n endRowIndex >= newLines.length\n ? ''\n : newLines[endRowIndex].slice(endColumnIndex)\n console.log({ before, after })\n Arrays.splice(newLines, startRowIndex, deleted.length, [before + after])\n } else {\n const before =\n newLines[startRowIndex].slice(0, startColumnIndex) + inserted[0]\n const middle = inserted.slice(1, -1)\n const after =\n inserted.at(-1) +\n (endRowIndex >= newLines.length\n ? ''\n : newLines[endRowIndex].slice(endColumnIndex))\n console.log({ before, after })\n Arrays.splice(newLines, startRowIndex, deleted.length, [\n before,\n ...middle,\n after,\n ])\n }\n // TODO only do this once after all edits, not inside loop\n textDocument.maxLineY = Math.min(\n textDocument.numberOfVisibleLines,\n textDocument.lines.length\n )\n }\n }\n return newLines\n}\n\nexport const getLine = (textDocument, index) => {\n return textDocument.lines[index]\n}\n\nexport const getLineLength = (textDocument, index) => {\n return textDocument.lines[index].length\n}\n\nexport const getText = (state) => {\n return state.lines.join('\\n')\n}\nconst RE_WHITESPACE = /^\\s+/\n\n// TODO this doesn't belong here\nexport const getIndent = (line) => {\n const whitespaceMatch = line.match(RE_WHITESPACE)\n if (!whitespaceMatch) {\n return ''\n }\n return whitespaceMatch[0]\n}\n\n// TDOO this doesn;t belong here\nexport const getSelectionText = (textDocument, range) => {\n Assert.object(textDocument)\n // console.log(range)\n // console.log(textDocument)\n const startRowIndex = range.start.rowIndex\n const startColumnIndex = range.start.columnIndex\n const endRowIndex = Math.min(\n range.end.rowIndex,\n textDocument.lines.length - 1\n )\n const endColumnIndex = range.end.columnIndex\n\n if (startRowIndex === endRowIndex) {\n // console.log(startRowIndex)\n // console.log(textDocument.lines)\n return [\n textDocument.lines[startRowIndex].slice(startColumnIndex, endColumnIndex),\n ]\n }\n const selectedLines = [\n textDocument.lines[startRowIndex].slice(startColumnIndex),\n ...textDocument.lines.slice(startRowIndex + 1, endRowIndex),\n textDocument.lines[endRowIndex].slice(0, endColumnIndex),\n ]\n return selectedLines\n}\n\nexport const offsetAt = (\n textDocument,\n positionRowIndex,\n positionColumnIndex\n) => {\n Assert.object(textDocument)\n Assert.number(positionRowIndex)\n Assert.number(positionColumnIndex)\n let offset = 0\n let rowIndex = 0\n const lines = textDocument.lines\n const max = Math.min(positionRowIndex, textDocument.lines.length)\n while (rowIndex < max) {\n offset += lines[rowIndex].length + 1\n rowIndex++\n }\n offset += positionColumnIndex\n return offset\n}\n\nexport const positionAt = (textDocument, offset) => {\n // console.log({ textDocument, offset })\n let rowIndex = 0\n let columnIndex = 0\n let currentOffset = 0\n while (rowIndex < textDocument.lines.length && currentOffset < offset) {\n textDocument\n currentOffset += textDocument.lines[rowIndex].length + 1\n rowIndex++\n }\n\n if (currentOffset > offset) {\n rowIndex\n rowIndex--\n currentOffset -= textDocument.lines[rowIndex].length + 1\n columnIndex = offset - currentOffset\n } else {\n columnIndex = currentOffset - offset\n }\n currentOffset\n offset\n // for (let i = 0; i < textDocument.lines.length; i++) {\n // if(currentOffset)\n // }\n // TODO\n return {\n rowIndex,\n columnIndex,\n }\n}\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\nexport const create = async () => {\n // TODO maybe use direct websocket connection\n // overhead would be that there is another websocket connection\n // but benefit would be that messages aren't routed through shared process\n // and that messages can be easier debugged:\n // extension messages go throught extension websocket,\n // shared process messages go through shared process websocket\n const id = await SharedProcess.invoke(\n /* ExtensionHost.start */ 'ExtensionHost.start'\n )\n console.log({ id })\n let _onmessage\n return {\n get onmessage() {\n return _onmessage\n },\n set onmessage(listener) {\n _onmessage = listener\n // TODO actually set listener\n },\n dispose() {\n return SharedProcess.invoke(\n /* ExtensionHost.send */ 'ExtensionHost.dispose',\n /* id */ id\n )\n },\n send(message) {\n return SharedProcess.invoke(\n /* ExtensionHost.send */ 'ExtensionHost.send',\n /* id */ id,\n /* message */ message\n )\n },\n }\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as IpcParent from '../IpcParent/IpcParent.js'\n\nexport const create = async () => {\n const extensionHostWorkerUrl = Platform.getExtensionHostWorkerUrl()\n return IpcParent.create({\n method: IpcParent.Methods.ModuleWorker,\n url: extensionHostWorkerUrl,\n name: 'Extension Host',\n })\n}\n", "/* istanbul ignore file */\nimport * as IpcParent from '../IpcParent/IpcParent.js'\n\nexport const create = () => {\n return IpcParent.create({\n method: IpcParent.Methods.WebSocket,\n protocol: 'lvce.extension-host',\n })\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as IpcParent from '../IpcParent/IpcParent.js'\n\nexport const create = async () => {\n const extensionHostWorkerUrl = Platform.getExtensionHostWorkerUrl()\n return IpcParent.create({\n method: IpcParent.Methods.ReferencePort,\n url: extensionHostWorkerUrl,\n name: 'Extension Host',\n })\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as IpcParent from '../IpcParent/IpcParent.js'\n\nexport const create = async () => {\n const extensionHostWorkerUrl = Platform.getExtensionHostWorkerUrl()\n return IpcParent.create({\n method: IpcParent.Methods.MessagePort,\n url: extensionHostWorkerUrl,\n name: 'Extension Host',\n })\n}\n", "import * as IpcParent from '../IpcParent/IpcParent.js'\n\nexport const create = async () => {\n return IpcParent.create({\n method: IpcParent.Methods.Electron,\n type: 'extension-host',\n })\n}\n", "import * as Callback from '../Callback/Callback.js'\nimport { JsonRpcError } from '../Errors/Errors.js'\nimport * as JsonRpc from '../JsonRpc/JsonRpc.js'\n\n/**\n * @enum {number}\n */\nexport const Methods = {\n SharedProcess: 1,\n ModuleWebWorker: 2,\n WebSocket: 3,\n Messageport: 4,\n ReferencePort: 5,\n Electron: 6,\n}\n\nconst getModule = (method) => {\n switch (method) {\n case Methods.SharedProcess:\n return import('./ExtensionHostIpcWithSharedProcess.js')\n case Methods.ModuleWebWorker:\n return import('./ExtensionHostIpcWithModuleWorker.js')\n case Methods.WebSocket:\n return import('./ExtensionHostIpcWithWebSocket.js')\n case Methods.ReferencePort:\n return import('./ExtensionHostIpcWithReferencePort.js')\n case Methods.Messageport:\n return import('./ExtensionHostIpcWithMessagePort.js')\n case Methods.Electron:\n return import('./ExtensionHostIpcWithElectron.js')\n default:\n throw new Error(`unexpected extension host type: ${method}`)\n }\n}\n\nconst isResultMessage = (message) => {\n return 'result' in message\n}\n\nconst isErrorMessage = (message) => {\n return 'error' in message\n}\n\nconst restoreError = (error) => {\n if (error instanceof Error) {\n return error\n }\n if (error.code && error.code === -32601) {\n console.log('create json rpc error')\n const restoredError = new JsonRpcError(error.message)\n restoredError.stack = error.stack\n return restoredError\n }\n const restoredError = new Error(error.message)\n if (error.data) {\n if (error.data.stack) {\n restoredError.stack = error.data.stack\n }\n if (error.data.codeFrame) {\n // @ts-ignore\n restoredError.codeFrame = error.data.codeFrame\n }\n }\n return restoredError\n}\n\nconst handleMessage = (message) => {\n if (message.id) {\n if (isResultMessage(message)) {\n Callback.resolve(message.id, message.result)\n } else if (isErrorMessage(message)) {\n const restoredError = restoreError(message.error)\n Callback.reject(message.id, restoredError)\n } else {\n throw new JsonRpcError('unexpected message type')\n }\n } else {\n throw new JsonRpcError('unexpected message type')\n }\n}\n\nexport const listen = async (method) => {\n const module = await getModule(method)\n const ipc = await module.create()\n // TODO maybe pass handleMessage as paramter to make code more functional\n ipc.onmessage = handleMessage\n return {\n invoke(method, ...params) {\n return JsonRpc.invoke(ipc, method, ...params)\n },\n }\n}\n", "import * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'\n\nexport const name = 'webExtensionHost'\n\nexport const ipc = ExtensionHostIpc.Methods.ModuleWebWorker\n\nexport const canActivate = (extension) => {\n return typeof extension.browser === 'string'\n}\n\nexport const create = () => {\n return {\n // Completion\n executeCompletionProvider:\n ExtensionHostCompletion.executeCompletionProvider,\n\n // Definition\n executeDefinitionProvider() {},\n\n // File system\n readDirWithFileTypes() {},\n\n // Type Definition\n executeTypeDefinitionProvider() {},\n }\n}\n", "import * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'\n\nexport const name = 'nodeExtensionHost'\n\nexport const ipc = ExtensionHostIpc.Methods.WebSocket\n\nexport const canActivate = (extension) => {\n return typeof extension.main === 'string'\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ExtensionMeta from '../ExtensionMeta/ExtensionMeta.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'\n\n/**\n * @enum\n */\nconst ExtensionHostState = {\n Off: 0,\n Loading: 1,\n Running: 2,\n Error: 3,\n}\n\nexport const state = {\n extensionPromiseCache: Object.create(null),\n extensionHosts: Object.create(null),\n pendingIpcs: Object.create(null),\n}\n\nconst toActivatableExtension = (extension) => {\n return {\n path: extension.path,\n id: extension.id,\n main: extension.main,\n }\n}\n\n// const startExtensionHost = async (type) => {\n// return ExtensionHostIpc.listen(ExtensionHostIpc.Methods.SharedProcess)\n// }\n\nexport const startExtensionHost = async (name, ipcType) => {\n const exisingIpcPromise = state.pendingIpcs[name]\n if (exisingIpcPromise) {\n const ipc = await exisingIpcPromise\n return {\n name: ipcType,\n ipc,\n }\n }\n if (state.extensionHosts[name]) {\n return state.extensionHosts[name]\n }\n const promise = ExtensionHostIpc.listen(ipcType)\n state.pendingIpcs[name] = promise\n const ipc = await promise\n delete state.pendingIpcs[name]\n state.extensionHosts[name] = {\n state: ExtensionHostState.Running,\n ipc,\n name: ipcType,\n }\n return state.extensionHosts[name]\n}\n\nexport const stopExtensionHost = async (key) => {\n const existingExtensionHost = state.extensionHosts[key]\n if (existingExtensionHost) {\n switch (existingExtensionHost.state) {\n case ExtensionHostState.Off:\n throw new Error('extension host cannot be off')\n case ExtensionHostState.Loading:\n case ExtensionHostState.Error:\n existingExtensionHost.ipc.dispose()\n break\n default:\n throw new Error('invalid extension host state')\n }\n }\n}\n\nexport const canActivate = (manager, extensions) => {\n return extensions.some(manager.canActivate)\n}\n", "import * as ExtensionHostIpc from '../ExtensionHostIpc/ExtensionHostIpc.js'\n\nexport const name = 'nodeExtensionHost'\n\nexport const ipc = ExtensionHostIpc.Methods.Electron\n\nexport const canActivate = (extension) => {\n return typeof extension.main === 'string'\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const getPathName = () => {\n return RendererProcess.invoke(\n /* Location.getPathName */ 'Location.getPathName'\n )\n}\n\nexport const getHref = () => {\n return RendererProcess.invoke(/* Location.getHref */ 'Location.getHref')\n}\n\nexport const setPathName = (pathName) => {\n return RendererProcess.invoke(\n /* Location.setPathName */ 'Location.setPathName',\n /* pathName */ pathName\n )\n}\n\nexport const hydrate = () => {\n return RendererProcess.invoke(/* Location.hydrate */ 'Location.hydrate')\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const exit = async () => {\n return ElectronProcess.invoke('App.exit')\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const reload = () => {\n return ElectronProcess.invoke('ElectronWindow.reload')\n}\n\nexport const minimize = () => {\n return ElectronProcess.invoke('ElectronWindow.minimize')\n}\n\nexport const unmaximize = () => {\n return ElectronProcess.invoke('ElectronWindow.unmaximize')\n}\n\nexport const maximize = () => {\n return ElectronProcess.invoke('ElectronWindow.maximize')\n}\n\nexport const close = () => {\n return ElectronProcess.invoke('ElectronWindow.close')\n}\n\nexport const openNew = (url) => {\n return ElectronProcess.invoke('AppWindow.openNew', url)\n}\n\nexport const toggleDevtools = () => {\n return ElectronProcess.invoke('ElectronWindow.toggleDevtools')\n}\n", "import * as ElectronApp from '../ElectronApp/ElectronApp.js'\nimport * as ElectronWindow from '../ElectronWindow/ElectronWindow.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nconst reloadWeb = async () => {\n await RendererProcess.invoke(/* windowReload */ 8080)\n}\n\nconst reloadRemote = async () => {\n await RendererProcess.invoke(/* windowReload */ 8080)\n}\n\nconst reloadElectron = async () => {\n await ElectronWindow.reload()\n}\nexport const reload = () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return reloadWeb()\n case PlatformType.Remote:\n return reloadRemote()\n case PlatformType.Electron:\n return reloadElectron()\n default:\n return\n }\n}\n\nconst minimizeWeb = () => {}\n\nconst minimizeRemote = () => {}\n\nconst minimizeElectron = () => {\n return ElectronWindow.minimize()\n}\n\nexport const minimize = async () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return minimizeWeb()\n case PlatformType.Remote:\n return minimizeRemote()\n case PlatformType.Electron:\n return minimizeElectron()\n default:\n return\n }\n}\n\nconst maximizeWeb = () => {}\nconst maximizeRemote = () => {}\nconst maximizeElectron = () => {\n return ElectronWindow.maximize()\n}\n\nexport const maximize = async () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return maximizeWeb()\n case PlatformType.Remote:\n return maximizeRemote()\n case PlatformType.Electron:\n return maximizeElectron()\n default:\n return\n }\n}\n\nconst unmaximizeWeb = () => {}\n\nconst unmaximizeRemote = () => {}\n\nconst unmaximizeElectron = () => {\n return ElectronWindow.unmaximize()\n}\n\nexport const unmaximize = async () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return unmaximizeWeb()\n case PlatformType.Remote:\n return unmaximizeRemote()\n case PlatformType.Electron:\n return unmaximizeElectron()\n default:\n return\n }\n}\n\nconst closeWeb = () => {}\nconst closeRemote = () => {}\nconst closeElectron = () => {\n return ElectronWindow.close()\n}\n\nexport const close = async () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return closeWeb()\n case PlatformType.Remote:\n return closeRemote()\n case PlatformType.Electron:\n return closeElectron()\n default:\n return\n }\n}\n\nconst exitWeb = () => {}\nconst exitRemote = () => {}\nconst exitElectron = () => {\n return ElectronApp.exit()\n}\n\nexport const exit = () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return exitWeb()\n case PlatformType.Remote:\n return exitRemote()\n case PlatformType.Electron:\n return exitElectron()\n }\n}\n\nexport const setTitle = async (title) => {\n await RendererProcess.invoke(\n /* Window.setTitle */ 'Window.setTitle',\n /* title */ title\n )\n}\n\nconst openNewWeb = () => {}\nconst openNewRemote = () => {}\nconst openNewElectron = () => {\n return ElectronWindow.openNew()\n}\n\nexport const openNew = async () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return openNewWeb()\n case PlatformType.Remote:\n return openNewRemote()\n case PlatformType.Electron:\n return openNewElectron()\n default:\n return\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Location from '../Location/Location.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Window from '../Window/Window.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const state = {\n workspacePath: '',\n homeDir: '',\n pathSeparator: '',\n workspaceUri: '',\n source: '',\n href: '',\n isTest: false,\n}\n\n/**\n * @param {string|undefined} path\n */\nexport const setPath = async (path) => {\n Assert.string(path)\n // TODO not in electron\n const pathSeparator = await FileSystem.getPathSeparator(path)\n state.workspacePath = path\n state.pathSeparator = pathSeparator\n await onWorkspaceChange()\n}\n\nexport const setUri = async (uri) => {\n const path = uri.slice('file://'.length)\n state.workspacePath = path\n state.workspaceUri = uri\n await onWorkspaceChange()\n}\n\nconst getResolvedRootFromSharedProcess = async () => {\n const resolvedRoot = await SharedProcess.invoke(\n /* Workspace.resolveRoot */ 'Workspace.resolveRoot'\n )\n return resolvedRoot\n}\n\nconst isValid = (resolvedRoot) => {\n return (\n resolvedRoot &&\n typeof resolvedRoot.path === 'string' &&\n typeof resolvedRoot.uri === 'string' &&\n typeof resolvedRoot.homeDir === 'string' &&\n typeof resolvedRoot.pathSeparator === 'string'\n )\n}\n\nconst getResolveRootFromSessionStorage = async () => {\n const resolvedRoot = await Command.execute(\n /* SessionStorage.getJson */ 'SessionStorage.getJson',\n /* key */ 'workspace'\n )\n if (!isValid(resolvedRoot)) {\n return undefined\n }\n return resolvedRoot\n}\n\nexport const isTest = () => {\n return state.isTest\n}\n\nconst getResolvedRootFromRendererProcess = async (href) => {\n const url = new URL(href)\n if (url.searchParams.has('replayId')) {\n const replayId = url.searchParams.get('replayId')\n await Command.execute(\n 'SessionReplay.replaySession',\n /* sessionId */ replayId\n )\n return undefined\n }\n if (href.includes('tests/')) {\n state.isTest = true\n return {\n path: href,\n homeDir: '',\n pathSeparator: '/',\n source: 'test',\n }\n }\n if (url.pathname.startsWith('/github')) {\n const path = `github://${url.pathname.slice('/github'.length + 1)}`\n return {\n path,\n homeDir: '',\n pathSeparator: '/',\n source: 'renderer-process',\n }\n }\n if (Platform.platform === 'web') {\n const resolvedRoot = {\n path: 'web:///workspace',\n homeDir: '',\n pathSeparator: '/',\n source: 'renderer-process',\n }\n return resolvedRoot\n }\n return undefined\n}\n\nconst getResolvedRootRemote = async (href) => {\n const resolvedRootFromRendererProcess =\n await getResolvedRootFromRendererProcess(href)\n if (resolvedRootFromRendererProcess) {\n return resolvedRootFromRendererProcess\n }\n const resolvedRootFromSessionStorage =\n await getResolveRootFromSessionStorage()\n if (resolvedRootFromSessionStorage) {\n return resolvedRootFromSessionStorage\n }\n console.log('esle')\n return getResolvedRootFromSharedProcess()\n}\n\nconst getResolvedRoot = async (href) => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return getResolvedRootFromRendererProcess(href)\n default:\n return getResolvedRootRemote(href)\n }\n}\n\nconst getTitle = (workspacePath) => {\n const pathSeparator = state.pathSeparator\n return workspacePath.slice(workspacePath.lastIndexOf(pathSeparator) + 1)\n}\n\nconst getPathName = (workspacePath) => {\n if (workspacePath.startsWith('github://')) {\n return '/github/' + workspacePath.slice('github://'.length)\n }\n return ''\n}\n\nconst onWorkspaceChange = async () => {\n const title = getTitle(state.workspacePath)\n await Window.setTitle(title)\n if (Platform.platform === 'web' || Platform.platform === 'remote') {\n const pathName = getPathName(state.workspacePath)\n await Location.setPathName(pathName)\n }\n await GlobalEventBus.emitEvent('workspace.change', state.workspacePath)\n}\n\nexport const hydrate = async ({ href }) => {\n if (state.workspacePath) {\n return\n }\n const resolvedRoot = await getResolvedRoot(href)\n if (state.isTest) {\n return\n }\n if (state.workspacePath) {\n return\n }\n // TODO why is this if statement here?\n if (state.homeDir !== resolvedRoot.homeDir) {\n state.homeDir = resolvedRoot.homeDir\n }\n // TODO how to check that path from renderer process is valid?\n // TODO also need to check whether it is a folder or file\n state.workspacePath = resolvedRoot.path\n state.homeDir = resolvedRoot.homeDir\n state.pathSeparator = resolvedRoot.pathSeparator\n state.workspaceUri = resolvedRoot.uri\n state.source = resolvedRoot.source\n await onWorkspaceChange()\n}\n\n/**\n * @deprecated use getWorkspaceUri instead\n * @returns\n */\nexport const getWorkspacePath = () => {\n return state.workspacePath\n}\n\nexport const getWorkspaceUri = () => {\n return state.workspaceUri\n}\n\nexport const getHomeDir = () => {\n return state.homeDir\n}\n\n// TODO this should be in FileSystem module\nexport const pathBaseName = (path) => {\n const pathSeparator = state.pathSeparator\n return path.slice(path.lastIndexOf(pathSeparator) + 1)\n}\n\n// TODO this should be in FileSystem module\nexport const pathDirName = (path) => {\n const pathSeparator = state.pathSeparator\n return path.slice(0, path.lastIndexOf(pathSeparator))\n}\n\nexport const getAbsolutePath = (relativePath) => {\n if (relativePath.startsWith('./')) {\n return `${state.workspacePath}/${relativePath.slice(2)}` // TODO support windows paths\n }\n return `${state.workspacePath}/${relativePath}` // TODO support windows paths\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\nimport * as ExtensionMeta from '../ExtensionMeta/ExtensionMeta.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as ExtensionHostManagementBrowser from './ExtensionHostManagementBrowser.js'\nimport * as ExtensionHostManagementNode from './ExtensionHostManagementNode.js'\nimport * as ExtensionHostManagementShared from './ExtensionHostManagementShared.js'\nimport * as ExtensionHostManagementElectron from './ExtensionHostManagementElectron.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const state = {\n /**\n * @type {any[]}\n */\n extensionHosts: [],\n}\n\nconst getExtensionHostManagementTypes = () => {\n const platform = Platform.platform\n switch (platform) {\n case PlatformType.Web:\n return [ExtensionHostManagementBrowser]\n case PlatformType.Remote:\n return [ExtensionHostManagementBrowser, ExtensionHostManagementNode]\n case PlatformType.Electron:\n return [ExtensionHostManagementBrowser, ExtensionHostManagementElectron]\n default:\n throw new Error('unsupported platform')\n }\n}\n\nconst getManagersWithExtensionsToActivate = (\n extensionHostManagers,\n extensions\n) => {\n const managersToActivate = []\n for (const manager of extensionHostManagers) {\n const toActivate = []\n for (const extension of extensions) {\n if (manager.canActivate(extension)) {\n toActivate.push(extension)\n }\n }\n if (toActivate.length > 0) {\n managersToActivate.push({ manager, toActivate })\n }\n }\n return managersToActivate\n}\n\nconst startSynching = async (extensionHost) => {\n const handleEditorCreate = (editor) => {\n const text = TextDocument.getText(editor)\n return extensionHost.ipc.invoke(\n 'ExtensionHostTextDocument.syncFull',\n editor.uri,\n editor.id,\n editor.languageId,\n text\n )\n }\n GlobalEventBus.addListener('editor.create', handleEditorCreate)\n\n const handleEditorChange = (editor, changes) => {\n return extensionHost.ipc.invoke(\n 'ExtensionHostTextDocument.syncIncremental',\n editor.id,\n changes\n )\n }\n GlobalEventBus.addListener('editor.change', handleEditorChange)\n\n const handleEditorLanguageChange = (editor) => {\n return extensionHost.ipc.invoke(\n 'ExtensionHostTextDocument.setLanguageId',\n editor.id,\n editor.languageId\n )\n }\n\n GlobalEventBus.addListener(\n 'editor.languageChange',\n handleEditorLanguageChange\n )\n\n const handleWorkspaceChange = (workspacePath) => {\n return extensionHost.ipc.invoke('Workspace.setWorkspacePath', workspacePath)\n }\n\n const handlePreferencesChange = () => {\n return extensionHost.ipc.invoke('Configuration.configurationChanged')\n }\n\n GlobalEventBus.addListener('workspace.change', handleWorkspaceChange)\n GlobalEventBus.addListener('preferences.changed', handlePreferencesChange)\n\n const instances = ViewletStates.getAllInstances()\n const editorInstance = instances.EditorText\n if (editorInstance) {\n await handleEditorCreate(editorInstance.state)\n }\n await handleWorkspaceChange(Workspace.state.workspacePath)\n console.log('finish text document synching')\n}\n\n// TODO add tests for this\nexport const activateByEvent = async (event) => {\n Assert.string(event)\n if (!Languages.hasLoaded()) {\n await Languages.waitForLoad()\n }\n // TODO should not query extensions multiple times\n const extensions = await ExtensionMeta.getExtensions()\n const { resolved, rejected } = ExtensionMeta.organizeExtensions(extensions)\n // TODO if many (more than two?) extensions cannot be loaded,\n // it shouldn't should that many error messages\n await ExtensionMeta.handleRejectedExtensions(rejected)\n const extensionsToActivate = ExtensionMeta.filterByMatchingEvent(\n resolved,\n event\n )\n // TODO how to handle when multiple reference providers are registered for nodejs and webworker extension host?\n // what happens when all of them / some of them throw error?\n // what happens when some of them take very long to activate?\n\n const extensionHostManagerTypes = getExtensionHostManagementTypes()\n const extensionHostsWithExtensions = getManagersWithExtensionsToActivate(\n extensionHostManagerTypes,\n extensionsToActivate\n )\n const extensionHosts = []\n for (const managerWithExtensions of extensionHostsWithExtensions) {\n const extensionHost =\n await ExtensionHostManagementShared.startExtensionHost(\n managerWithExtensions.manager.name,\n managerWithExtensions.manager.ipc\n )\n // TODO register text document change listener and sync text documents\n await startSynching(extensionHost)\n Assert.object(extensionHost)\n for (const extension of managerWithExtensions.toActivate) {\n // TODO tell extension host to activate extension\n await extensionHost.ipc.invoke(\n 'ExtensionHostExtension.enableExtension',\n extension\n )\n }\n extensionHosts.push(extensionHost)\n }\n\n state.extensionHosts = extensionHosts\n\n // TODO support querying completion items from multiple extension hosts\n // e.g. completion items from node extension host and word based completions from web worker extension host\n return extensionHosts\n}\n\nexport const getExtensionHosts = () => {\n return state.extensionHosts\n}\n", "import * as ExtensionHostManagement from '../ExtensionHostManagement/ExtensionHostManagement.js'\n\nexport const executeProviders = async ({\n event,\n method,\n params,\n noProviderFoundMessage = 'No provider found',\n noProviderFoundResult,\n combineResults,\n}) => {\n const extensionHosts = await ExtensionHostManagement.activateByEvent(event)\n if (extensionHosts.length === 0) {\n return noProviderFoundResult ?? undefined\n }\n const promises = []\n for (const extensionHost of extensionHosts) {\n promises.push(extensionHost.ipc.invoke(method, ...params))\n }\n const results = await Promise.all(promises)\n console.log({ results })\n const combinedResult = combineResults(results)\n console.log({ combinedResult })\n return combinedResult\n}\n\nexport const executeProvider = async ({\n event,\n method,\n params,\n noProviderFoundMessage,\n}) => {\n const extensionHosts = await ExtensionHostManagement.activateByEvent(event)\n if (extensionHosts.length === 0) {\n throw new Error(noProviderFoundMessage)\n }\n const promises = []\n for (const extensionHost of extensionHosts) {\n promises.push(extensionHost.ipc.invoke(method, ...params))\n }\n const results = await Promise.all(promises)\n return results[0]\n}\n\nexport const execute = async ({ method, params }) => {\n const extensionHosts = ExtensionHostManagement.getExtensionHosts()\n for (const extensionHost of extensionHosts) {\n const result = await extensionHost.ipc.invoke(method, ...params)\n }\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nexport const readFile = (protocol, path) => {\n // TODO there shouldn't be multiple file system providers for the same protocol\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.readFile',\n params: [protocol, path],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const remove = (protocol, path) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.remove',\n params: [protocol, path],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\n/**\n *\n * @param {string} protocol\n * @param {string} oldPath\n * @param {string} newPath\n */\nexport const rename = (protocol, oldPath, newPath) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.rename',\n params: [protocol, oldPath, newPath],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const mkdir = (protocol, path) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.mkdir',\n params: [protocol, path],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const createFile = (protocol, path) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.writeFile',\n params: [protocol, path, ''],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const createFolder = (protocol, path) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.createFolder',\n params: [protocol, path],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const writeFile = (protocol, path, content) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.writeFile',\n params: [protocol, path, content],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const readDirWithFileTypes = (protocol, path) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.readDirWithFileTypes',\n params: [protocol, path],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n\nexport const getPathSeparator = (protocol) => {\n return ExtensionHostShared.executeProvider({\n event: `onFileSystem:${protocol}`,\n method: 'ExtensionHostFileSystem.getPathSeparator',\n params: [protocol],\n noProviderFoundMessage: 'no file system provider found',\n })\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const readFile = () => {\n return Command.execute(\n /* Developer.getStartupPerformanceContent */ 'Developer.getStartupPerformanceContent'\n )\n}\n\nexport const writeFile = () => {\n throw new Error('not implemented')\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const readFile = () => {\n return Command.execute(/* Developer.getMemoryUsageContent */ 821)\n}\n\nexport const writeFile = () => {\n throw new Error('not implemened')\n}\n", "import { VError } from '../VError/VError.js'\n\nexport const stringify = (value) => {\n return JSON.stringify(value, null, 2) + '\\n'\n}\n\nexport const parse = (content) => {\n // TODO use better json parse to throw more helpful error messages if json is invalid\n try {\n return JSON.parse(content)\n } catch (error) {\n throw new VError(error, 'failed to parse json')\n }\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Json from '../Json/Json.js'\n\nexport const clear = async (storageType) => {\n await RendererProcess.invoke(\n /* WebStorage.clear */ 'WebStorage.clear',\n /* StorageType */ storageType\n )\n}\n\nexport const getText = async (storageType, key) => {\n const item = await RendererProcess.invoke(\n /* WebStorage.getItem */ 'WebStorage.getItem',\n /* storageType */ storageType,\n /* key */ key\n )\n return item || ''\n}\n\nexport const getJson = async (storageType, key) => {\n const item = await getText(storageType, key)\n if (!item) {\n return undefined\n }\n try {\n return Json.parse(item)\n } catch {\n return undefined\n }\n}\n\nexport const setText = async (storageType, key, value) => {\n await RendererProcess.invoke(\n /* WebStorage.setItem */ 'WebStorage.setItem',\n /* storageType */ storageType,\n /* key */ key,\n /* value */ value\n )\n}\n\nexport const setJson = async (storageType, key, value) => {\n const stringifiedValue = Json.stringify(value)\n await setText(storageType, key, stringifiedValue)\n}\n", "export const LocalStorage = 1\n\nexport const SessionStorage = 2\n", "import * as WebStorage from '../WebStorage/WebStorage.js'\nimport * as WebStorageType from '../WebStorageType/WebStorageType.js'\n\nexport const clear = () => {\n return WebStorage.clear(WebStorageType.LocalStorage)\n}\n\nexport const getText = (key) => {\n return WebStorage.getText(WebStorageType.LocalStorage, key)\n}\n\nexport const getJson = (key) => {\n return WebStorage.getJson(WebStorageType.LocalStorage, key)\n}\n\nexport const setText = (key, value) => {\n return WebStorage.setText(WebStorageType.LocalStorage, key, value)\n}\n\nexport const setJson = (key, value) => {\n return WebStorage.setJson(WebStorageType.LocalStorage, key, value)\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const name = 'Disk'\n\nexport const copy = (source, target) => {\n return SharedProcess.invoke(\n /* FileSystem.copy */ 'FileSystem.copy',\n /* source */ source,\n /* target */ target\n )\n}\n\nexport const readFile = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.readFile */ 'FileSystem.readFile',\n /* path */ path\n )\n}\n\nexport const remove = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.remove */ 'FileSystem.remove',\n /* path */ path\n )\n}\n\nexport const rename = (oldUri, newUri) => {\n return SharedProcess.invoke(\n /* FileSystem.rename */ 'FileSystem.rename',\n /* oldPath */ oldUri,\n /* newPath */ newUri\n )\n}\n\nexport const mkdir = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.mkdir */ 'FileSystem.mkdir',\n /* path */ path\n )\n}\n\nexport const writeFile = async (path, content) => {\n await SharedProcess.invoke(\n /* FileSystem.writeFile */ 'FileSystem.writeFile',\n /* path */ path,\n /* content */ content\n )\n}\n\nexport const ensureFile = async () => {}\n\nexport const readDirWithFileTypes = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.readDirWithFileTypes */ 'FileSystem.readDirWithFileTypes',\n /* path */ path\n )\n}\n\nexport const getBlobUrl = (path) => {\n return `/remote/${path}`\n}\n\nexport const getPathSeparator = () => {\n if (Platform.platform === PlatformType.Web) {\n return '/'\n }\n return SharedProcess.invoke(\n /* FileSystem.getPathSeparator */ 'FileSystem.getPathSeparator'\n )\n}\n\nexport const getRealPath = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.getRealPath */ 'FileSystem.getRealPath',\n /* path */ path\n )\n}\n\nexport const stat = (path) => {\n return SharedProcess.invoke(\n /* FileSystem.stat */ 'FileSystem.stat',\n /* path */ path\n )\n}\n\nexport const chmod = (path, permissions) => {\n return SharedProcess.invoke(\n /* FileSystem.stat */ 'FileSystem.chmod',\n /* path */ path,\n /* permissions */ permissions\n )\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as LocalStorage from '../LocalStorage/LocalStorage.js'\nimport * as FileSystemDisk from './FileSystemDisk.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const readFileInternal = async (getPath) => {\n const path = await getPath()\n Assert.string(path)\n if (Platform.platform === PlatformType.Web) {\n const settingsJsonContent = await LocalStorage.getText(path)\n if (settingsJsonContent) {\n return settingsJsonContent\n }\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/config/defaultSettings.json`\n return Command.execute(/* Ajax.getText */ 'Ajax.getText', /* url */ url)\n }\n // TODO handle enoent and other errors gracefully\n const userSettingsContent = await FileSystemDisk.readFile(path)\n return userSettingsContent\n}\n\nexport const writeFileInternal = async (getPath, content) => {\n const path = await getPath()\n Assert.string(path)\n if (Platform.platform === PlatformType.Web) {\n await Command.execute(\n /* LocalStorage.setText */ 6904,\n /* key */ path,\n /* value */ content\n )\n return\n }\n // TODO handle enoent and other errors gracefully\n try {\n await FileSystemDisk.writeFile(path, content)\n } catch (error) {\n // TODO error should just have enoent code that could be checked\n\n // @ts-ignore\n if (error.message.includes('File not found')) {\n try {\n const dirname = Workspace.pathDirName(path)\n await FileSystemDisk.mkdir(dirname)\n await FileSystemDisk.writeFile(path, content)\n } catch (error) {\n // @ts-ignore\n error.message = `Failed to write ${path}: ${error.message}`\n throw error\n }\n } else {\n // @ts-ignore\n error.message = `Failed to write ${path}: ${error.message}`\n throw error\n }\n }\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as FileSystemAppShared from './FileSystemAppShared.js'\n\nexport const readFile = () => {\n return FileSystemAppShared.readFileInternal(Platform.getUserSettingsPath)\n}\n\nexport const writeFile = (content) => {\n return FileSystemAppShared.writeFileInternal(\n Platform.getUserSettingsPath,\n content\n )\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as FileSystemAppShared from './FileSystemAppShared.js'\n\nexport const writeFile = (content) => {\n return FileSystemAppShared.writeFileInternal(\n Platform.getRecentlyOpenedPath,\n content\n )\n}\n\nexport const readFile = () => {\n return FileSystemAppShared.readFileInternal(Platform.getRecentlyOpenedPath)\n}\n", "const instanceOfAny = (object, constructors) => constructors.some((c) => object instanceof c);\n\nlet idbProxyableTypes;\nlet cursorAdvanceMethods;\n// This is a function to prevent it throwing up in node environments.\nfunction getIdbProxyableTypes() {\n return (idbProxyableTypes ||\n (idbProxyableTypes = [\n IDBDatabase,\n IDBObjectStore,\n IDBIndex,\n IDBCursor,\n IDBTransaction,\n ]));\n}\n// This is a function to prevent it throwing up in node environments.\nfunction getCursorAdvanceMethods() {\n return (cursorAdvanceMethods ||\n (cursorAdvanceMethods = [\n IDBCursor.prototype.advance,\n IDBCursor.prototype.continue,\n IDBCursor.prototype.continuePrimaryKey,\n ]));\n}\nconst cursorRequestMap = new WeakMap();\nconst transactionDoneMap = new WeakMap();\nconst transactionStoreNamesMap = new WeakMap();\nconst transformCache = new WeakMap();\nconst reverseTransformCache = new WeakMap();\nfunction promisifyRequest(request) {\n const promise = new Promise((resolve, reject) => {\n const unlisten = () => {\n request.removeEventListener('success', success);\n request.removeEventListener('error', error);\n };\n const success = () => {\n resolve(wrap(request.result));\n unlisten();\n };\n const error = () => {\n reject(request.error);\n unlisten();\n };\n request.addEventListener('success', success);\n request.addEventListener('error', error);\n });\n promise\n .then((value) => {\n // Since cursoring reuses the IDBRequest (*sigh*), we cache it for later retrieval\n // (see wrapFunction).\n if (value instanceof IDBCursor) {\n cursorRequestMap.set(value, request);\n }\n // Catching to avoid \"Uncaught Promise exceptions\"\n })\n .catch(() => { });\n // This mapping exists in reverseTransformCache but doesn't doesn't exist in transformCache. This\n // is because we create many promises from a single IDBRequest.\n reverseTransformCache.set(promise, request);\n return promise;\n}\nfunction cacheDonePromiseForTransaction(tx) {\n // Early bail if we've already created a done promise for this transaction.\n if (transactionDoneMap.has(tx))\n return;\n const done = new Promise((resolve, reject) => {\n const unlisten = () => {\n tx.removeEventListener('complete', complete);\n tx.removeEventListener('error', error);\n tx.removeEventListener('abort', error);\n };\n const complete = () => {\n resolve();\n unlisten();\n };\n const error = () => {\n reject(tx.error || new DOMException('AbortError', 'AbortError'));\n unlisten();\n };\n tx.addEventListener('complete', complete);\n tx.addEventListener('error', error);\n tx.addEventListener('abort', error);\n });\n // Cache it for later retrieval.\n transactionDoneMap.set(tx, done);\n}\nlet idbProxyTraps = {\n get(target, prop, receiver) {\n if (target instanceof IDBTransaction) {\n // Special handling for transaction.done.\n if (prop === 'done')\n return transactionDoneMap.get(target);\n // Polyfill for objectStoreNames because of Edge.\n if (prop === 'objectStoreNames') {\n return target.objectStoreNames || transactionStoreNamesMap.get(target);\n }\n // Make tx.store return the only store in the transaction, or undefined if there are many.\n if (prop === 'store') {\n return receiver.objectStoreNames[1]\n ? undefined\n : receiver.objectStore(receiver.objectStoreNames[0]);\n }\n }\n // Else transform whatever we get back.\n return wrap(target[prop]);\n },\n set(target, prop, value) {\n target[prop] = value;\n return true;\n },\n has(target, prop) {\n if (target instanceof IDBTransaction &&\n (prop === 'done' || prop === 'store')) {\n return true;\n }\n return prop in target;\n },\n};\nfunction replaceTraps(callback) {\n idbProxyTraps = callback(idbProxyTraps);\n}\nfunction wrapFunction(func) {\n // Due to expected object equality (which is enforced by the caching in `wrap`), we\n // only create one new func per func.\n // Edge doesn't support objectStoreNames (booo), so we polyfill it here.\n if (func === IDBDatabase.prototype.transaction &&\n !('objectStoreNames' in IDBTransaction.prototype)) {\n return function (storeNames, ...args) {\n const tx = func.call(unwrap(this), storeNames, ...args);\n transactionStoreNamesMap.set(tx, storeNames.sort ? storeNames.sort() : [storeNames]);\n return wrap(tx);\n };\n }\n // Cursor methods are special, as the behaviour is a little more different to standard IDB. In\n // IDB, you advance the cursor and wait for a new 'success' on the IDBRequest that gave you the\n // cursor. It's kinda like a promise that can resolve with many values. That doesn't make sense\n // with real promises, so each advance methods returns a new promise for the cursor object, or\n // undefined if the end of the cursor has been reached.\n if (getCursorAdvanceMethods().includes(func)) {\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n func.apply(unwrap(this), args);\n return wrap(cursorRequestMap.get(this));\n };\n }\n return function (...args) {\n // Calling the original function with the proxy as 'this' causes ILLEGAL INVOCATION, so we use\n // the original object.\n return wrap(func.apply(unwrap(this), args));\n };\n}\nfunction transformCachableValue(value) {\n if (typeof value === 'function')\n return wrapFunction(value);\n // This doesn't return, it just creates a 'done' promise for the transaction,\n // which is later returned for transaction.done (see idbObjectHandler).\n if (value instanceof IDBTransaction)\n cacheDonePromiseForTransaction(value);\n if (instanceOfAny(value, getIdbProxyableTypes()))\n return new Proxy(value, idbProxyTraps);\n // Return the same value back if we're not going to transform it.\n return value;\n}\nfunction wrap(value) {\n // We sometimes generate multiple promises from a single IDBRequest (eg when cursoring), because\n // IDB is weird and a single IDBRequest can yield many responses, so these can't be cached.\n if (value instanceof IDBRequest)\n return promisifyRequest(value);\n // If we've already transformed this value before, reuse the transformed value.\n // This is faster, but it also provides object equality.\n if (transformCache.has(value))\n return transformCache.get(value);\n const newValue = transformCachableValue(value);\n // Not all types are transformed.\n // These may be primitive types, so they can't be WeakMap keys.\n if (newValue !== value) {\n transformCache.set(value, newValue);\n reverseTransformCache.set(newValue, value);\n }\n return newValue;\n}\nconst unwrap = (value) => reverseTransformCache.get(value);\n\nexport { reverseTransformCache as a, instanceOfAny as i, replaceTraps as r, unwrap as u, wrap as w };\n", "import { w as wrap, r as replaceTraps } from './wrap-idb-value.js';\nexport { u as unwrap, w as wrap } from './wrap-idb-value.js';\n\n/**\n * Open a database.\n *\n * @param name Name of the database.\n * @param version Schema version.\n * @param callbacks Additional callbacks.\n */\nfunction openDB(name, version, { blocked, upgrade, blocking, terminated } = {}) {\n const request = indexedDB.open(name, version);\n const openPromise = wrap(request);\n if (upgrade) {\n request.addEventListener('upgradeneeded', (event) => {\n upgrade(wrap(request.result), event.oldVersion, event.newVersion, wrap(request.transaction));\n });\n }\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n openPromise\n .then((db) => {\n if (terminated)\n db.addEventListener('close', () => terminated());\n if (blocking)\n db.addEventListener('versionchange', () => blocking());\n })\n .catch(() => { });\n return openPromise;\n}\n/**\n * Delete a database.\n *\n * @param name Name of the database.\n */\nfunction deleteDB(name, { blocked } = {}) {\n const request = indexedDB.deleteDatabase(name);\n if (blocked)\n request.addEventListener('blocked', () => blocked());\n return wrap(request).then(() => undefined);\n}\n\nconst readMethods = ['get', 'getKey', 'getAll', 'getAllKeys', 'count'];\nconst writeMethods = ['put', 'add', 'delete', 'clear'];\nconst cachedMethods = new Map();\nfunction getMethod(target, prop) {\n if (!(target instanceof IDBDatabase &&\n !(prop in target) &&\n typeof prop === 'string')) {\n return;\n }\n if (cachedMethods.get(prop))\n return cachedMethods.get(prop);\n const targetFuncName = prop.replace(/FromIndex$/, '');\n const useIndex = prop !== targetFuncName;\n const isWrite = writeMethods.includes(targetFuncName);\n if (\n // Bail if the target doesn't exist on the target. Eg, getAll isn't in Edge.\n !(targetFuncName in (useIndex ? IDBIndex : IDBObjectStore).prototype) ||\n !(isWrite || readMethods.includes(targetFuncName))) {\n return;\n }\n const method = async function (storeName, ...args) {\n // isWrite ? 'readwrite' : undefined gzipps better, but fails in Edge :(\n const tx = this.transaction(storeName, isWrite ? 'readwrite' : 'readonly');\n let target = tx.store;\n if (useIndex)\n target = target.index(args.shift());\n // Must reject if op rejects.\n // If it's a write operation, must reject if tx.done rejects.\n // Must reject with op rejection first.\n // Must resolve with op value.\n // Must handle both promises (no unhandled rejections)\n return (await Promise.all([\n target[targetFuncName](...args),\n isWrite && tx.done,\n ]))[0];\n };\n cachedMethods.set(prop, method);\n return method;\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get: (target, prop, receiver) => getMethod(target, prop) || oldTraps.get(target, prop, receiver),\n has: (target, prop) => !!getMethod(target, prop) || oldTraps.has(target, prop),\n}));\n\nexport { deleteDB, openDB };\n", "import { r as replaceTraps, i as instanceOfAny, a as reverseTransformCache, u as unwrap } from './wrap-idb-value.js';\n\nconst advanceMethodProps = ['continue', 'continuePrimaryKey', 'advance'];\nconst methodMap = {};\nconst advanceResults = new WeakMap();\nconst ittrProxiedCursorToOriginalProxy = new WeakMap();\nconst cursorIteratorTraps = {\n get(target, prop) {\n if (!advanceMethodProps.includes(prop))\n return target[prop];\n let cachedFunc = methodMap[prop];\n if (!cachedFunc) {\n cachedFunc = methodMap[prop] = function (...args) {\n advanceResults.set(this, ittrProxiedCursorToOriginalProxy.get(this)[prop](...args));\n };\n }\n return cachedFunc;\n },\n};\nasync function* iterate(...args) {\n // tslint:disable-next-line:no-this-assignment\n let cursor = this;\n if (!(cursor instanceof IDBCursor)) {\n cursor = await cursor.openCursor(...args);\n }\n if (!cursor)\n return;\n cursor = cursor;\n const proxiedCursor = new Proxy(cursor, cursorIteratorTraps);\n ittrProxiedCursorToOriginalProxy.set(proxiedCursor, cursor);\n // Map this double-proxy back to the original, so other cursor methods work.\n reverseTransformCache.set(proxiedCursor, unwrap(cursor));\n while (cursor) {\n yield proxiedCursor;\n // If one of the advancing methods was not called, call continue().\n cursor = await (advanceResults.get(proxiedCursor) || cursor.continue());\n advanceResults.delete(proxiedCursor);\n }\n}\nfunction isIteratorProp(target, prop) {\n return ((prop === Symbol.asyncIterator &&\n instanceOfAny(target, [IDBIndex, IDBObjectStore, IDBCursor])) ||\n (prop === 'iterate' && instanceOfAny(target, [IDBIndex, IDBObjectStore])));\n}\nreplaceTraps((oldTraps) => ({\n ...oldTraps,\n get(target, prop, receiver) {\n if (isIteratorProp(target, prop))\n return iterate;\n return oldTraps.get(target, prop, receiver);\n },\n has(target, prop) {\n return isIteratorProp(target, prop) || oldTraps.has(target, prop);\n },\n}));\n", "export * from './index.js';\nimport './async-iterators.js';\n", "// TODO high memory usage in idb because of transactionDoneMap\n\nimport { openDB } from '../../../static/js/idb/with-async-ittr.js'\nimport { VError } from '../VError/VError.js'\n\nexport const state = {\n databases: Object.create(null),\n eventId: 0,\n dbVersion: 1,\n /**\n * @type {any}\n */\n cachedDb: undefined,\n}\n\nconst getDb = async () => {\n // @ts-ignore\n const db = await openDB('session', state.dbVersion, {\n async upgrade(db, oldVersion) {\n if (!db.objectStoreNames.contains('session')) {\n const objectStore = await db.createObjectStore('session', {\n autoIncrement: true,\n })\n objectStore.createIndex('sessionId', 'sessionId', { unique: false })\n }\n },\n })\n return db\n}\n\nconst getDbMemoized = async () => {\n if (!state.cachedDb) {\n state.cachedDb = await getDb()\n }\n return state.cachedDb\n}\n\nexport const saveValue = async (storeId, value) => {\n try {\n const db = await getDbMemoized()\n await db.add('session', value)\n } catch (error) {\n throw new VError(error, 'Failed to save value to indexed db')\n }\n}\n\nexport const getValues = async (storeId) => {\n try {\n const db = await getDbMemoized()\n const tx = db.transaction(storeId, 'readwrite')\n const [objects] = await Promise.all([tx.store.getAll(), tx.done])\n console.log({ objects })\n return objects\n } catch (error) {\n throw new VError(error, 'Failed to get values from indexed db')\n }\n}\n\nexport const getValuesByIndexName = async (storeId, indexName, only) => {\n const db = await getDbMemoized()\n const transaction = db.transaction(storeId)\n const index = transaction.store.index(indexName)\n const iterator = index.iterate(only)\n const objects = []\n for await (const cursor of iterator) {\n objects.push(cursor.value)\n }\n return objects\n}\n", "export const now = () => {\n return performance.now()\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as IndexedDb from '../IndexedDb/IndexedDb.js'\nimport * as Location from '../Location/Location.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Assert from '../Assert/Assert.js'\nimport { VError } from '../VError/VError.js'\nimport * as Json from '../Json/Json.js'\nimport * as Timestamp from '../Timestamp/Timestamp.js'\n\nexport const state = {\n sessionId: '',\n}\n\nconst getSessionId = () => {\n if (!state.sessionId) {\n state.sessionId = `session-${new Date().toISOString()}`\n }\n return state.sessionId\n}\n\nexport const handleMessage = async (source, timestamp, message) => {\n try {\n const sessionId = getSessionId()\n await IndexedDb.saveValue(sessionId, {\n source,\n timestamp,\n sessionId,\n ...message,\n })\n } catch (error) {\n console.error(error)\n // @ts-ignore\n if (error.cause) {\n // @ts-ignore\n console.error(error.cause)\n }\n // await ErrorHandling.handleError(error)\n }\n}\n\nexport const replayCurrentSession = async () => {\n if (!state.sessionId) {\n throw new VError(`session replay is disabled in settings`)\n }\n // TODO\n // 1. read commands from indexeddb\n // 2. open new window\n // 3. replay ui with commands from indexeddb\n\n const href = await Location.getHref()\n const replayUrl = `${href}?replayId=${state.sessionId}`\n await Command.execute('Open.openUrl', /* url */ replayUrl)\n}\n\nexport const getSessionContent = async () => {\n const sessionId = state.sessionId\n const events = await getEvents(sessionId)\n return Json.stringify(events)\n}\n\nconst DONT_REPLAY = new Set(['Open.openUrl', 'Download.downloadFile'])\n\nexport const replaySession = async (sessionId) => {\n const events = await getEvents(sessionId)\n const originalIpc = RendererProcess.state.ipc\n const originalSend = originalIpc.send\n RendererProcess.state.ipc.send = () => {}\n RendererProcess.state.ipc.onmessage = (event) => {\n const data = event.data\n if (typeof data === 'string') {\n return\n }\n if ('result' in data) {\n callbacks[data.id].resolve(data.result)\n } else if ('error' in data) {\n callbacks[data.id].reject(data.error)\n } else if ('method' in data) {\n // ignore\n } else {\n throw new Error('unexpected message from renderer worker')\n }\n }\n const callbacks = Object.create(null)\n const invoke = (event) => {\n return new Promise((resolve, reject) => {\n callbacks[event.id] = { resolve, reject }\n originalSend(event)\n })\n }\n let now = 0\n for (const event of events) {\n if (\n event.source === 'to-renderer-process' &&\n !DONT_REPLAY.has(event.method)\n ) {\n // console.log(event.timestamp)\n const timeDifference = event.timestamp - now\n await new Promise((resolve, reject) => {\n setTimeout(resolve, timeDifference)\n })\n await invoke(event)\n now = event.timestamp\n }\n // if (event.source === 'from-renderer-process') {\n // console.log(event)\n // }\n }\n // console.log({ events })\n}\n\nexport const getEvents = async (sessionId) => {\n try {\n const timestamp = Timestamp.now()\n const events = await IndexedDb.getValuesByIndexName(\n 'session',\n 'sessionId',\n sessionId\n )\n return events\n } catch (error) {\n throw new VError(error, `failed to get session replay events`)\n }\n}\n\nexport const downloadSession = async () => {\n try {\n const sessionId = getSessionId()\n const events = await getEvents(sessionId)\n const fileName = `${sessionId}.json`\n await Command.execute(\n /* Download.downloadJson */ 'Download.downloadJson',\n /* json */ events,\n /* fileName */ fileName\n )\n } catch (error) {\n throw new VError(error, 'Failed to download session')\n }\n}\n\nconst wrapIpc = (ipc, name, getData) => {\n if (!ipc) {\n return\n }\n Assert.object(ipc)\n Assert.string(name)\n Assert.fn(getData)\n const nameFrom = `from-${name}`\n const nameTo = `to-${name}`\n const wrappedIpc = {\n async send(message) {\n ipc.send(message)\n const timestamp = Timestamp.now()\n await handleMessage(nameTo, timestamp, message)\n },\n sendAndTransfer(message, transferables) {\n ipc.sendAndTransfer(message, transferables)\n },\n get onmessage() {\n return ipc.onmessage\n },\n set onmessage(listener) {\n ipc.onmessage = listener\n },\n }\n const originalOnMessage = wrappedIpc.onmessage\n wrappedIpc.onmessage = async (event) => {\n const message = getData(event)\n const timestamp = Timestamp.now()\n await originalOnMessage(event)\n await handleMessage(nameFrom, timestamp, message)\n }\n return wrappedIpc\n}\n\nexport const startRecording = () => {\n RendererProcess.state.ipc = wrapIpc(\n RendererProcess.state.ipc,\n 'renderer-process',\n (event) => event.data\n )\n SharedProcess.state.ipc = wrapIpc(\n SharedProcess.state.ipc,\n 'shared-process',\n (event) => event\n )\n}\n\nexport const openSession = async () => {\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ 'app://session.json'\n )\n}\n", "import * as SessionReplay from '../SessionReplay/SessionReplay.js'\n\nexport const writeFile = (content) => {\n throw new Error('not allowed')\n}\n\nexport const readFile = async () => {\n const content = await SessionReplay.getSessionContent()\n return content\n}\n", "export const name = 'App'\n\nconst getModule = (uri) => {\n switch (uri) {\n case 'startup-performance':\n return import('./FileSystemAppStartupPerformance.js')\n case 'memory-usage':\n return import('./FileSystemAppMemoryUsage.js')\n case 'settings.json':\n return import('./FileSystemAppSettings.js')\n case 'recently-opened.json':\n return import('./FileSystemAppRecentlyOpened.js')\n case 'session.json':\n return import('./FileSystemAppSession.js')\n default:\n throw new Error(`unsupported file: ${uri}`)\n }\n}\n\nexport const readFile = async (uri) => {\n const module = await getModule(uri)\n return module.readFile()\n}\n\nexport const writeFile = async (uri, content) => {\n const module = await getModule(uri)\n return module.writeFile(content)\n}\n\nexport const readDirWithFileTypes = () => {\n return []\n}\n\nexport const rename = async (oldUri, newUri) => {\n throw new Error('not allowed')\n}\n\nexport const remove = async (path) => {\n throw new Error('not allowed')\n}\n\nexport const mkdir = async (path) => {\n throw new Error('not allowed')\n}\n\nexport const getPathSeparator = () => {\n return '/'\n}\n", "// based on https://github.com/conwnet/github1s/blob/master/extensions/github1s/src/interfaces/github-api-rest.ts\n\nimport * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\n\nconst encodeFilePath = (filePath) => {\n return filePath\n .split('/')\n .map((segment) => encodeURIComponent(segment))\n .join('/')\n}\n\nexport const readGitHubFile = async (owner, repo, fileSha) => {\n return 'Not implemented'\n}\n\nexport const readGithubFileWithUrl = (githubUrl) => {\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ githubUrl)\n}\n\nexport const readFile = (owner, repo, path) => {\n const githubApiUrl = Platform.getGithubApiUrl()\n const url = `${githubApiUrl}/repos/${owner}/${repo}/contents/${path}`\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n}\n\nexport const readGitHubDirectory = (owner, repo, ref, path) => {\n const githubApiUrl = Platform.getGithubApiUrl()\n const url = `${githubApiUrl}/repos/${owner}/${repo}/git/trees/${ref}${encodeFilePath(\n path\n ).replace(/^\\//, ':')}`\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n}\n", "// based on https://github.com/conwnet/github1s/blob/master/extensions/github1s/src/interfaces/github-api-rest.ts\n\nimport * as GitHubRestApi from '../GitHubRestApi/GitHubRestApi.js'\nimport * as Command from '../Command/Command.js'\n\nexport const name = 'GitHub'\n\nexport const state = {\n cache: Object.create(null),\n}\n\nconst getGitHubFile = async (path) => {\n const parts = path.split('/')\n const [owner, repo, ...rest] = parts\n const relativePath = rest.join('/') // TODO many times split/join a bit unnecessary\n const githubFile = await GitHubRestApi.readFile(owner, repo, relativePath)\n // TODO what if it is not a file but a folder?\n return githubFile\n}\n\nexport const readFile = async (path) => {\n const githubFile = await getGitHubFile(path)\n if (githubFile.encoding !== 'base64') {\n throw new Error('unsupported encoding')\n }\n return Command.execute(\n /* Base64.decode */ 'Base64.decode',\n /* encoded */ githubFile.content\n )\n}\n\nconst getType = (githubType) => {\n switch (githubType) {\n case 'tree':\n return 'folder'\n case 'blob':\n return 'file'\n default:\n return 'unknown'\n }\n}\n\nconst toDirent = (githubDirent) => {\n return {\n name: githubDirent.path,\n type: getType(githubDirent.type),\n }\n}\n\nconst toDirents = (githubResponse) => {\n return githubResponse.tree.map(toDirent)\n}\n\nexport const readDirWithFileTypes = async (path) => {\n const parts = path.split('/')\n const [owner, repo, ...rest] = parts\n const relativePath = '/' + rest.join('/') // TODO many times split/join a bit unnecessary\n // TODO handle reading real directory\n const githubDirents = await GitHubRestApi.readGitHubDirectory(\n owner,\n repo,\n 'HEAD',\n relativePath\n )\n state.cache[path] = githubDirents\n const dirents = toDirents(githubDirents)\n return dirents\n}\n\nexport const getBlobUrl = async (path) => {\n const githubFile = await getGitHubFile(path)\n return githubFile.download_url\n}\n\nexport const getPathSeparator = () => {\n return '/'\n}\n", "import * as DirentType from '../DirentType/DirentType.js'\n\n// TODO when it rejects, it should throw a custom error,\n// FileSystemError\n\nexport const name = 'Web'\n\nconst files = Object.create(null)\n\nfiles['/.gitkeep'] = ''\n\nfiles['/languages/index.dart'] = `void main() {\n print('Hello, World!');\n}`\n\nfiles['/languages/index.js'] = `const add = (a, b) => {\n return a + b;\n}`\n\nfiles['/languages/scrolling.txt'] = `line 1\nline 2\nline 3\nline 4\nline 5\nline 6\nline 7\nline 8\nline 9\nline 10\nline 11\nline 12\nline 13\nline 14\nline 15\nline 16\nline 17\nline 18\nline 19\nline 20\nline 21\nline 22\nline 23\nline 24\nline 25\nline 26\nline 27\nline 28\nline 29\nline 30\nline 31\nline 32\nline 33\nline 34\nline 35\nline 36\nline 37\nline 38\nline 39\nline 40\nline 41\nline 42\nline 43\nline 44\nline 45\nline 46\nline 47\nline 48\nline 49\nline 50\nline 51\nline 52\nline 53\nline 54\nline 55\nline 56\nline 57\nline 58\nline 59\nline 60\nline 61\nline 62\nline 63\nline 64\nline 65\nline 66\nline 67\nline 68\nline 69\nline 70\nline 71\nline 72\nline 73\nline 74\nline 75\nline 76\nline 77\nline 78\nline 79\nline 80\nline 81\nline 82\nline 83\nline 84\nline 85\nline 86\nline 87\nline 88\nline 89\nline 90\nline 91\nline 92\nline 93\nline 94\nline 95\nline 96\nline 97\nline 98\nline 99\nline 100\n`\n\nfiles['/languages/index.html'] = '<h1 class=\"abc\">hello world</h1>'\n\nfiles['/languages/index.css'] = `h1 {\n font-size: 24px;\n}\n\n.Editor {\n width: 100%;\n height: 100%;\n background: var(--MainBackground);\n color: white;\n outline: none;\n border: none;\n font-family: 'Fira Code', monospace;\n position: relative;\n white-space: pre;\n font-size: 15px;\n letter-spacing: 0.5px;\n contain: strict;\n tab-size: 2;\n}\n`\n\nfiles['/languages/index.ex'] = `defmodule RealWorld do\n @moduledoc \"\"\"\n RealWorld keeps the contexts that define your domain\n and business logic.\n Contexts are also responsible for managing your data, regardless\n if it comes from the database, an external API or others.\n \"\"\"\nend`\n\nfiles['/languages/index.jl'] = `function mandelbrot(a)\nz = 0\nfor i=1:50\nz = z^2 + a\nend\nreturn z\nend\n\nfor y=1.0:-0.05:-1.0\nfor x=-2.0:0.0315:0.5\nabs(mandelbrot(complex(x, y))) < 2 ? print(\"*\") : print(\" \")\nend\nprintln()\nend`\n\nfiles['/languages/index.perl'] = `#!/usr/bin/perl\n#\n# The traditional first program.\n\n# Strict and warnings are recommended.\nuse strict;\nuse warnings;\n\n# Print a message.\nprint \"Hello, World!\\n\";`\n\nfiles['/languages/index.kt'] = `fun main(args : Array<String>) {\n println(\"Hello, World!\")\n}`\n\nfiles['/languages/index.java'] = `class HelloWorld {\n public static void main(String[] args) {\n System.out.println(\"Hello, World!\");\n }\n}`\n\nfiles['/languages/index.cpp'] = `using namespace std;\n\ntemplate <class ANYTYPE>\nvoid thing(int a, Blah other_thing, double c=10, ANYTYPE f) {\n return;\n}\n\nint operator^(double a, double b) {\n cout << \"testing\";\n return 0;\n}\n\nint main(char arg_num, char** vargs) {\n if ( 1 and 0 ) cout << \"this is the and operator\\n\";\n if ( true and (c > 1) ) cout << \"this is the and operator\\n\";\n if ((true) and (c > 1) ) cout << \"this is still the and operator\\n\";\n\n #error I should be able to write single quotes in here: Don't make errors\n}`\n\nfiles['/languages/index.env'] = 'KEY=42'\n\nfiles['/sample-folder/a.txt'] = ''\nfiles['/sample-folder/b.txt'] = ''\nfiles['/sample-folder/c.txt'] = ''\n\nexport const state = {\n watchers: Object.create(null),\n saveListeners: [],\n}\n\nconst getName = (path) => {\n return path.slice(path.lastIndexOf('/') + 1)\n}\n\nconst getRelativePath = (path) => {\n return path.slice('/workspace'.length)\n}\n\nexport const readFile = async (path) => {\n const relativePath = getRelativePath(path)\n const file = files[relativePath]\n if (file === undefined) {\n throw new Error('file not found')\n }\n return file\n}\n\nexport const remove = async (path) => {\n throw new Error('not implemented')\n}\n\nexport const rename = async (oldPath, newPath) => {\n throw new Error('not implemented')\n}\n\nexport const mkdir = async (path) => {\n throw new Error('not implemented')\n}\n\nexport const createFile = async (path) => {\n throw new Error('not implemented')\n}\n\nexport const createFolder = async (path) => {\n throw new Error('not implemented')\n}\n\nexport const writeFile = async (path, content) => {\n throw new Error('not implemented')\n}\n\nconst getDirent = (path, relativePath) => {\n const rest = path.slice(relativePath.length + 1)\n if (rest.includes('/')) {\n return {\n type: DirentType.Directory,\n name: rest.slice(0, rest.indexOf('/')),\n }\n }\n return {\n type: 'file',\n name: rest,\n }\n}\n\nexport const readDirWithFileTypes = (path) => {\n const relativePath = getRelativePath(path)\n const dirents = []\n for (const key in files) {\n if (key.startsWith(relativePath)) {\n const dirent = getDirent(key, relativePath)\n if (!dirents.some((otherDirent) => otherDirent.name === dirent.name)) {\n dirents.push(dirent)\n }\n }\n }\n return dirents\n}\n\nexport const watch = async (path) => {\n throw new Error('not implemented')\n}\n\nexport const unwatch = (id) => {\n throw new Error('not implemented')\n}\n\nexport const unwatchAll = () => {\n throw new Error('not implemented')\n}\n\n// TODO should be in main/textDocument\nexport const onDidSave = (listener) => {\n throw new Error('not implemented')\n}\n\nexport const getPathSeparator = () => {\n return '/'\n}\n", "export const name = 'Data'\n\nexport const copy = (source, target) => {\n throw new Error('not implemented')\n}\n\nexport const readFile = (path) => {\n return path.slice('data://'.length + 3)\n}\n\nexport const remove = (path) => {\n throw new Error('not implemented')\n}\n\nexport const rename = (oldUri, newUri) => {\n throw new Error('not implemented')\n}\n\nexport const mkdir = (path) => {\n throw new Error('not implemented')\n}\n\nexport const writeFile = async (path, content) => {\n throw new Error('not implemented')\n}\n\nexport const ensureFile = async () => {}\n\nexport const readDirWithFileTypes = (path) => {\n throw new Error('not implemented')\n}\n\nexport const getBlobUrl = (path) => {\n throw new Error('not implemented')\n}\n\nexport const getPathSeparator = () => {\n throw new Error('not implemented')\n}\n", "import * as DirentType from '../DirentType/DirentType.js'\n\nexport const name = 'Memory'\n\nexport const state = {\n files: Object.create(null),\n}\n\nconst getDirent = (uri) => {\n return state.files[uri]\n}\n\nexport const readFile = (uri) => {\n const dirent = getDirent(uri)\n if (!dirent) {\n throw new Error(`File not found: ${uri}`)\n }\n if (dirent.type !== DirentType.File) {\n throw new Error('file is a directory')\n }\n return dirent.content\n}\n\nconst ensureParentDir = (uri) => {\n const startIndex = 0\n let endIndex = uri.indexOf('/')\n while (endIndex >= 0) {\n const part = uri.slice(startIndex, endIndex + 1)\n state.files[part] = {\n type: DirentType.Directory,\n content: '',\n }\n endIndex = uri.indexOf('/', endIndex + 1)\n }\n}\n\nexport const writeFile = (uri, content) => {\n const dirent = getDirent(uri)\n if (dirent) {\n dirent.content = content\n } else {\n ensureParentDir(uri)\n state.files[uri] = {\n type: DirentType.File,\n content,\n }\n }\n}\n\nexport const mkdir = (uri) => {\n if (!uri.endsWith('/')) {\n uri += '/'\n }\n ensureParentDir(uri)\n state.files[uri] = {\n type: DirentType.Directory,\n content: '',\n }\n}\n\nexport const getPathSeparator = () => {\n return '/'\n}\n\nexport const remove = (uri) => {\n const toDelete = []\n for (const key of Object.keys(state.files)) {\n if (key.startsWith(uri)) {\n toDelete.push(key)\n }\n }\n for (const key of toDelete) {\n delete state.files[key]\n }\n}\n\nexport const readDirWithFileTypes = (uri) => {\n if (!uri.endsWith('/')) {\n uri += '/'\n }\n const dirents = []\n for (const [key, value] of Object.entries(state.files)) {\n if (key.startsWith(uri)) {\n switch (value.type) {\n case DirentType.Directory:\n if (\n !key.slice(0, -1).includes('/', uri.length) &&\n key !== `${uri}/` &&\n key !== uri\n ) {\n dirents.push({\n type: value.type,\n name: key.slice(uri.length, -1),\n })\n }\n break\n case DirentType.File:\n if (!key.includes('/', uri.length + 1)) {\n dirents.push({\n type: value.type,\n name: key.slice(uri.length),\n })\n }\n break\n default:\n break\n }\n }\n }\n return dirents\n}\n\nexport const chmod = (path, permissions) => {\n throw new Error('[memfs] chmod not implemented')\n}\n", "// TODO file system providers should be lazy loaded (maybe)\n\nimport * as FileSystemExtensionHost from '../ExtensionHost/ExtensionHostFileSystem.js'\nimport * as FileSystemApp from './FileSystemApp.js'\nimport * as FileSystemDisk from './FileSystemDisk.js'\nimport * as FileSystemGitHub from './FileSystemGitHub.js'\nimport * as FileSystemWeb from './FileSystemWeb.js'\nimport * as FileSystemData from './FileSystemData.js'\nimport * as FileSystemMemory from './FileSystemMemory.js'\n// TODO when it rejects, it should throw a custom error,\n// FileSystemError\n\n// TODO lazyload different file system providers\n\nconst RE_PROTOCOL = /^([a-z]+):\\/\\//\n\nconst getProtocol = (uri) => {\n const protocolMatch = uri.match(RE_PROTOCOL)\n if (protocolMatch) {\n return protocolMatch[1]\n }\n return ''\n}\n\nexport const state = {\n fileSystems: Object.create(null),\n}\n\n// TODO extension host should be able to register arbitrary protocols (except app, http, https, file, )\nstate.fileSystems['extension-host'] = FileSystemExtensionHost\nstate.fileSystems.app = FileSystemApp\nstate.fileSystems.github = FileSystemGitHub\nstate.fileSystems.web = FileSystemWeb\nstate.fileSystems.data = FileSystemData\nstate.fileSystems.memfs = FileSystemMemory\n\nconst getFileSystem = (protocol) => {\n return state.fileSystems[protocol] || FileSystemDisk\n}\n\nconst PROTOCOL_POST_FIX_LENGTH = 3\n\nconst getPath = (protocol, uri) => {\n if (protocol === '') {\n return uri\n }\n return uri.slice(protocol.length + PROTOCOL_POST_FIX_LENGTH)\n}\n\nexport const readFile = (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.readFile(path)\n}\n\nexport const remove = async (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n await fileSystem.remove(path)\n}\n\nexport const rename = async (oldUri, newUri) => {\n const protocol = getProtocol(oldUri)\n const oldPath = getPath(protocol, oldUri)\n const newPath = getPath(protocol, newUri)\n const fileSystem = getFileSystem(protocol)\n await fileSystem.rename(oldPath, newPath)\n}\n\nexport const mkdir = async (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n await fileSystem.mkdir(path)\n}\n\nexport const writeFile = async (uri, content) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n await fileSystem.writeFile(path, content)\n}\n\nexport const readDirWithFileTypes = (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.readDirWithFileTypes(path)\n}\n\nexport const unwatch = (id) => {\n throw new Error('not implemented')\n}\n\nexport const unwatchAll = () => {\n throw new Error('not implemented')\n}\n\nexport const getBlobUrl = (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.getBlobUrl(path)\n}\n\nexport const copy = (sourceUri, targetUri) => {\n // TODO what if it is not the same file system?\n const protocol = getProtocol(sourceUri)\n const fileSystem = getFileSystem(protocol)\n const sourcePath = getPath(protocol, sourceUri)\n const targetPath = getPath(protocol, targetUri)\n return fileSystem.copy(sourcePath, targetPath)\n}\n\nexport const getPathSeparator = (uri) => {\n const protocol = getProtocol(uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.getPathSeparator(protocol)\n}\n\nexport const getRealPath = (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.getRealPath(path)\n}\n\nexport const stat = (uri) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.stat(path)\n}\n\nexport const chmod = (uri, permissions) => {\n const protocol = getProtocol(uri)\n const path = getPath(protocol, uri)\n const fileSystem = getFileSystem(protocol)\n return fileSystem.chmod(path, permissions)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as Json from '../Json/Json.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\n\nexport const state = Object.create(null)\n\nexport const openSettingsJson = async () => {\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ 'app://settings.json'\n )\n}\n\nexport const openKeyBindingsJson = async () => {\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ 'app://keyBindings.json'\n )\n}\n\n// TODO command for opening workspace settings\n\nconst getPreferencesJson = async () => {\n if (Platform.platform === 'web') {\n const cachedPreferences = await Command.execute(\n /* LocalStorage.getJson */ 'LocalStorage.getJson',\n /* key */ 'preferences'\n )\n if (cachedPreferences) {\n return cachedPreferences\n }\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/config/defaultSettings.json`\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n }\n return SharedProcess.invoke(/* Preferences.getAll */ 'Preferences.getAll')\n}\n\nconst getPreferences = async () => {\n // TODO cache preferences, but they should not be stale\n const preferences = getPreferencesJson()\n return preferences\n}\n\nexport const hydrate = async () => {\n try {\n // TODO should configuration be together with all other preferences (e.g. selecting color theme code is not needed on startup)\n // TODO probably not all preferences need to be kept in memory\n const preferences = await getPreferences()\n Object.assign(state, preferences)\n\n const styles = []\n const fontSize = preferences['editor.fontSize']\n if (fontSize) {\n styles.push(` --EditorFontSize: ${fontSize}px;`)\n }\n const fontFamily = preferences['editor.fontFamily']\n if (fontFamily) {\n styles.push(` --EditorFontFamily: ${fontFamily};`)\n }\n const lineHeight = preferences['editor.lineHeight']\n if (lineHeight) {\n styles.push(` --EditorLineHeight: ${lineHeight}px;`)\n }\n const letterSpacing = preferences['editor.letterSpacing']\n if (letterSpacing) {\n styles.push(` --EditorLetterSpacing: ${letterSpacing}px;`)\n }\n const css = `:root {\n${styles.join('\\n')}\n}`\n // TODO make Css.setInlineStyle a separate module in renderer-worker\n await RendererProcess.invoke(\n /* Css.setInlineStyle */ 'Css.setInlineStyle',\n /* id */ 'Settings',\n /* css */ css\n )\n } catch (error) {\n console.error(error)\n }\n}\n\nexport const get = (key) => {\n return state[key]\n}\n\nexport const set = async (key, value) => {\n state[key] = value\n if (Platform.platform === 'web') {\n const preferences = { ...state, [key]: value }\n await Command.execute(\n /* LocalStorage.setJson */ 'LocalStorage.setJson',\n /* key */ 'preferences',\n /* value */ preferences\n )\n return\n }\n const content = Json.stringify(state)\n await FileSystem.writeFile('app://settings.json', content)\n}\n\nexport const update = async (settings) => {\n const newSettings = { ...state, ...settings }\n const content = Json.stringify(newSettings)\n await FileSystem.writeFile('app://settings.json', content)\n await GlobalEventBus.emitEvent('preferences.changed')\n}\n", "export const File = '_file'\n\nexport const Folder = '_folder'\n\nexport const FolderOpen = '_folder_open'\n\nexport const None = ''\n", "import * as Command from '../Command/Command.js'\nimport * as DirentType from '../DirentType/DirentType.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport { VError } from '../VError/VError.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\nimport * as DefaultIcon from '../DefaultIcon/DefaultIcon.js'\n\nexport const state = {\n seenFiles: [],\n seenFolders: [],\n hasWarned: [],\n /**\n * @type{any}\n */\n iconTheme: undefined,\n}\n\nconst getIconThemeJson = async (iconThemeId) => {\n if (Platform.platform === PlatformType.Web) {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/icon-themes/${iconThemeId}.json`\n const json = await Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ url\n )\n return {\n json,\n }\n }\n return SharedProcess.invoke(\n /* ExtensionHost.getIconThemeJson */ 'ExtensionHost.getIconThemeJson',\n /* iconThemeId */ iconThemeId\n )\n}\n\nconst getExtension = (file) => {\n return file.slice(file.lastIndexOf('.') + 1).toLowerCase()\n}\n\nexport const getFileIcon = (file) => {\n const iconTheme = state.iconTheme\n const fileNameLower = file.name.toLowerCase()\n if (!iconTheme) {\n console.log('no icons theme', { file })\n return ''\n }\n const fileNameIcon = iconTheme.fileNames[fileNameLower]\n if (fileNameIcon) {\n return fileNameIcon\n }\n const extension = getExtension(fileNameLower)\n const extensionIcon = iconTheme.fileExtensions[extension]\n if (extensionIcon) {\n return extensionIcon\n }\n const languageId = Languages.getLanguageId(fileNameLower)\n const languageIcon = iconTheme.languageIds[languageId]\n if (languageIcon) {\n return languageIcon\n }\n return DefaultIcon.File\n}\n\nexport const getFolderIcon = (folder) => {\n const iconTheme = state.iconTheme\n // @ts-ignore\n if (!iconTheme || !iconTheme.folderNames) {\n return ''\n }\n // @ts-ignore\n const folderIcon = iconTheme.folderNames[folder.name.toLowerCase()]\n if (folderIcon) {\n return folderIcon\n }\n return DefaultIcon.Folder\n}\n\nconst getFolderIconExpanded = (folder) => {\n const iconTheme = state.iconTheme\n if (!iconTheme) {\n return ''\n }\n // @ts-ignore\n if (!iconTheme.folderNamesExpanded) {\n return DefaultIcon.FolderOpen\n }\n // @ts-ignore\n const folderName = iconTheme.folderNamesExpanded[folder.name.toLowerCase()]\n if (folderName) {\n return folderName\n }\n return DefaultIcon.FolderOpen\n}\n\nexport const getIcon = (dirent) => {\n switch (dirent.type) {\n case DirentType.File:\n return getFileIcon(dirent)\n case DirentType.Directory:\n return getFolderIcon(dirent)\n case DirentType.DirectoryExpanded:\n return getFolderIconExpanded(dirent)\n case DirentType.Symlink:\n return DefaultIcon.File\n default:\n console.warn(`unsupported type ${dirent.type}`)\n return DefaultIcon.None\n }\n}\n\nconst getBackgroundUrl = (extensionPath, value) => {\n if (Platform.platform === PlatformType.Web) {\n return `/file-icons/${value.slice(7)}`\n }\n // TODO what if the file in on linux and includes a backslash?\n if (extensionPath.includes('\\\\')) {\n const extensionUri = extensionPath.replaceAll('\\\\', '/')\n return `/remote/${extensionUri}/${value}`\n }\n return `/remote${extensionPath}/${value}`\n}\n\nconst getIconThemeCss2 = (iconTheme) => {\n const rules = []\n for (const [key, value] of Object.entries(iconTheme.json.iconDefinitions)) {\n const backgroundUrl = getBackgroundUrl(iconTheme.extensionPath, value)\n rules.push(`.Icon${key} { background-image: url(${backgroundUrl}) }`)\n }\n const rulesCss = rules.join('\\n')\n return rulesCss\n}\n\nexport const hydrate = async () => {\n try {\n // TODO icon theme css can be really large (3000+ lines)\n // and slow down recalculate style by 5x (e.g. rendering text in editor: 1.42ms normal, 7.42ms with icon theme)\n // icon theme should not slow down editor.\n // maybe set applied css only to actual used icons\n // for example, when a js file is in explorer, only generate the css for the js icon\n // that way there would be much less rules, but when a new file type appears (which should not happen often)\n // the css must be recalculated again\n // const iconThemeCss = await getIconThemeCss()\n // await RendererProcess.invoke(\n // /* Css.setInlineStyle */ 4551,\n // /* id */ 'ContributedIconTheme',\n // /* css */ iconThemeCss\n // )\n\n const iconThemeId = Preferences.get('icon-theme') || 'vscode-icons'\n const iconTheme = await getIconThemeJson(iconThemeId)\n state.iconTheme = iconTheme.json\n state.extensionPath = iconTheme.extensionPath\n\n const iconThemeCss = getIconThemeCss2(iconTheme)\n await RendererProcess.invoke(\n /* Css.setInlineStyle */ 'Css.setInlineStyle',\n /* id */ 'ContributedIconTheme',\n /* css */ iconThemeCss\n )\n\n await GlobalEventBus.emitEvent('iconTheme.change')\n // GlobalEventBus.addListener('dirents.update', handleDirentsUpdate)\n // GlobalEventBus.addListener('languages.changed', handleLanguagesUpdate)\n } catch (error) {\n console.error(new VError(error, `Failed to load icon theme`))\n }\n}\n", "export const focusIndex = (state, index) => {\n if (index < state.minLineY) {\n if (index < 0) {\n return {\n ...state,\n focusedIndex: index,\n focused: true,\n }\n }\n const diff = state.maxLineY - state.minLineY\n return {\n ...state,\n focusedIndex: index,\n focused: true,\n minLineY: index,\n maxLineY: index + diff,\n }\n } else if (index >= state.maxLineY) {\n const diff = state.maxLineY - state.minLineY\n return {\n ...state,\n focusedIndex: index,\n focused: true,\n minLineY: index + 1 - diff,\n maxLineY: index + 1,\n }\n }\n return {\n ...state,\n focusedIndex: index,\n focused: true,\n }\n}\n", "export const compareString = (a, b) => {\n return a.localeCompare(b)\n}\n", "import * as Compare from '../Compare/Compare.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as DirentType from '../DirentType/DirentType.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\n\nexport const getIndexFromPosition = (state, x, y) => {\n const { top, itemHeight, dirents } = state\n const index = Math.floor((y - top) / itemHeight)\n if (index < 0) {\n return 0\n }\n if (index >= dirents.length) {\n return -1\n }\n return index\n}\n\nconst priorityMapFoldersFirst = {\n [DirentType.Directory]: 1,\n [DirentType.File]: 0,\n [DirentType.Unknown]: 0,\n [DirentType.Socket]: 0,\n}\n\nconst compareDirentType = (direntA, direntB) => {\n return (\n priorityMapFoldersFirst[direntB.type] -\n priorityMapFoldersFirst[direntA.type]\n )\n}\n\nconst compareDirentName = (direntA, direntB) => {\n return Compare.compareString(direntA.name, direntB.name)\n}\n\nexport const compareDirent = (direntA, direntB) => {\n return (\n compareDirentType(direntA, direntB) || compareDirentName(direntA, direntB)\n )\n}\n\nconst toDisplayDirents = (root, pathSeparator, rawDirents, parentDirent) => {\n rawDirents.sort(compareDirent) // TODO maybe shouldn't mutate input argument, maybe sort after mapping\n // TODO figure out whether this uses too much memory (name,path -> redundant, depth could be computed on demand)\n const toDisplayDirent = (rawDirent, index) => {\n const path = parentDirent.path\n ? [parentDirent.path, rawDirent.name].join(pathSeparator)\n : [root, rawDirent.name].join(pathSeparator)\n return {\n name: rawDirent.name,\n posInSet: index + 1,\n setSize: rawDirents.length,\n depth: parentDirent.depth + 1,\n type: rawDirent.type,\n path, // TODO storing absolute path might be too costly, could also store relative path here\n icon: IconTheme.getIcon(rawDirent),\n }\n }\n return rawDirents.map(toDisplayDirent)\n}\n\nexport const getParentStartIndex = (dirents, index) => {\n const dirent = dirents[index]\n let startIndex = index - 1\n while (startIndex >= 0 && dirents[startIndex].depth >= dirent.depth) {\n startIndex--\n }\n return startIndex\n}\n\nexport const getParentEndIndex = (dirents, index) => {\n const dirent = dirents[index]\n let endIndex = index + 1\n while (endIndex < dirents.length && dirents[endIndex].depth > dirent.depth) {\n endIndex++\n }\n return endIndex\n}\n\nexport const getChildDirents = async (root, pathSeparator, parentDirent) => {\n Assert.string(root)\n Assert.string(pathSeparator)\n Assert.object(parentDirent)\n // TODO use event/actor based code instead, this is impossible to cancel right now\n // also cancel updating when opening new folder\n // const dispose = state => state.pendingRequests.forEach(cancelRequest)\n // TODO should use FileSystem directly in this case because it is globally available anyway\n // and more typesafe than Command.execute\n // and more performant\n const uri = parentDirent.path\n const rawDirents = await FileSystem.readDirWithFileTypes(uri)\n const displayDirents = toDisplayDirents(\n root,\n pathSeparator,\n rawDirents,\n parentDirent\n )\n return displayDirents\n}\n\nexport const mergeDirents = (oldDirents, newDirents) => {\n const merged = []\n let oldIndex = 0\n for (const newDirent of newDirents) {\n merged.push(newDirent)\n for (let i = oldIndex; i < oldDirents.length; i++) {\n if (oldDirents[i].path === newDirent.path) {\n // TOOD copy children of old dirent\n oldIndex = i\n break\n }\n }\n }\n return merged\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\nimport * as DirentType from '../DirentType/DirentType.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js' // TODO should not import viewlet manager -> avoid cyclic dependency\nimport * as Workspace from '../Workspace/Workspace.js'\nimport { focusIndex } from './ViewletExplorerFocusIndex.js'\nimport {\n compareDirent,\n getChildDirents,\n getIndexFromPosition,\n getParentEndIndex,\n getParentStartIndex,\n mergeDirents,\n} from './ViewletExplorerShared.js'\n// TODO viewlet should only have create and refresh functions\n// every thing else can be in a separate module <viewlet>.lazy.js\n// and <viewlet>.ipc.js\n\n// viewlet: creating | refreshing | done | disposed\n// TODO recycle viewlets (maybe)\n\nexport const name = 'Explorer'\n\n// TODO instead of root string, there should be a root dirent\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n root: '',\n dirents: [],\n focusedIndex: -1,\n focused: false,\n hoverIndex: -1,\n top,\n left,\n height,\n deltaY: 0,\n minLineY: 0,\n maxLineY: 0,\n pathSeparator: '',\n version: 0,\n editingIndex: -1,\n itemHeight: 22,\n dropTargets: [],\n }\n}\n\nconst getPathSeparator = (root) => {\n return FileSystem.getPathSeparator(root)\n}\n\nexport const loadContent = async (state) => {\n const root = Workspace.state.workspacePath\n const pathSeparator = await getPathSeparator(root) // TODO only load path separator once\n const dirents = await getTopLevelDirents(root, pathSeparator)\n const { itemHeight, height } = state\n return {\n ...state,\n root,\n dirents,\n maxLineY: Math.round(height / itemHeight),\n pathSeparator,\n }\n}\n\nconst updateIcon = (dirent) => {\n return { ...dirent, icon: IconTheme.getIcon(dirent) }\n}\n\nexport const updateIcons = (state) => {\n const newDirents = state.dirents.map(updateIcon)\n return {\n ...state,\n dirents: newDirents,\n }\n}\n\nexport const contentLoaded = async (state) => {\n // console.trace({ state })\n // TODO execute command directly\n // TODO this should a promise and be awaited\n}\n\nconst getTopLevelDirents = (root, pathSeparator) => {\n if (!root) {\n return []\n }\n return getChildDirents(root, pathSeparator, {\n depth: 0,\n path: root,\n type: DirentType.Directory,\n })\n}\n\n// export const contentLoadedEffects = (state) => {\n// // TODO why is this event emitted?\n// GlobalEventBus.emitEvent('dirents.update', state.dirents)\n\n// // TODO create should not have side effects\n// // TODO dispose listener when explorer is disposed\n// // TODO hoist function\n// const handleLanguagesChanged = () => {\n// const state = Viewlet.getState('Explorer')\n// const newState = updateIcons(state)\n// Viewlet.setState('Explorer', newState)\n// }\n// GlobalEventBus.addListener('languages.changed', handleLanguagesChanged)\n\n// // TODO hoist function\n// GlobalEventBus.addListener('workspace.change', async () => {\n// const newRoot = Workspace.state.workspacePath\n// const state1 = { ...state, root: newRoot }\n// const newState = await loadContent(state1)\n// await Viewlet.setState('Explorer', newState)\n// // await contentLoaded(newState)\n// // TODO\n// })\n\n// GlobalEventBus.addListener('iconTheme.change', async () => {\n// await contentLoaded(state)\n// })\n// }\n\nexport const handleLanguagesChanged = (state) => {\n return updateIcons(state)\n}\n\nexport const handleWorkspaceChange = async (state) => {\n const newRoot = Workspace.state.workspacePath\n const state1 = { ...state, root: newRoot }\n const newState = await loadContent(state1)\n return newState\n}\n\nexport const handleIconThemeChange = (state) => {\n return updateIcons(state)\n}\n\nconst getVisible = (state) => {\n return state.dirents.slice(state.minLineY, state.maxLineY)\n}\n\nexport const setDeltaY = (state, deltaY) => {\n const { itemHeight, height, dirents } = state\n if (deltaY < 0) {\n deltaY = 0\n } else if (deltaY > dirents.length * itemHeight - height) {\n deltaY = Math.max(dirents.length * itemHeight - height, 0)\n }\n if (state.deltaY === deltaY) {\n return state\n }\n const minLineY = Math.round(deltaY / itemHeight)\n const maxLineY = minLineY + Math.round(height / itemHeight)\n return {\n ...state,\n deltaY,\n minLineY,\n maxLineY,\n }\n}\n\nexport const handleWheel = (state, deltaY) => {\n return setDeltaY(state, state.deltaY + deltaY)\n}\n\nexport const getFocusedDirent = (state) => {\n const dirent = state.dirents[state.focusedIndex]\n return dirent\n}\n\n// TODO support multiselection and removing multiple dirents\nexport const removeDirent = async (state) => {\n if (state.focusedIndex < 0) {\n return state\n }\n const dirent = getFocusedDirent(state)\n const absolutePath = dirent.path\n try {\n // TODO handle error\n await FileSystem.remove(absolutePath)\n } catch (error) {\n // TODO vscode shows error as alert (no stacktrace) and retry button\n // maybe should show alert as well, but where to put stacktrace?\n // on web should probably show notification (dialog)\n // ErrorHandling.handleError(error)\n await ErrorHandling.showErrorDialog(error)\n return\n }\n // TODO avoid state mutation\n const newVersion = ++state.version\n // TODO race condition\n // const newState = await loadContent(state)\n if (state.version !== newVersion || state.disposed) {\n return state\n }\n // TODO is it possible to make this more functional instead of mutating state?\n // maybe every function returns a new state?\n const index = state.dirents.indexOf(dirent)\n let deleteEnd = index + 1\n\n for (; deleteEnd < state.dirents.length; deleteEnd++) {\n if (state.dirents[deleteEnd].depth <= dirent.depth) {\n break\n }\n }\n const deleteCount = deleteEnd - index\n const newDirents = [...state.dirents]\n newDirents.splice(index, deleteCount)\n let indexToFocus = -1\n\n if (newDirents.length === 0) {\n indexToFocus = -1\n } else if (index < state.focusedIndex) {\n indexToFocus = state.focusedIndex - 1\n } else if (index === state.focusedIndex) {\n indexToFocus = Math.max(state.focusedIndex - 1, 0)\n } else {\n indexToFocus = Math.max(state.focusedIndex - 1, 0)\n }\n return {\n ...state,\n dirents: newDirents,\n focusedIndex: indexToFocus,\n }\n}\n\nconst updateDirents = async (state) => {\n const newVersion = ++state.version\n const newState = await loadContent(state)\n if (state.version !== newVersion || state.disposed) {\n return\n }\n Object.assign(state, newState)\n await contentLoaded(state)\n}\n\nexport const renameDirent = async (state) => {\n const index = state.focusedIndex\n state.editingIndex = index\n const dirent = state.dirents[index]\n const name = dirent.name\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'showRenameInputBox',\n /* index */ index,\n /* name */ name\n )\n}\n\nexport const cancelRename = async (state) => {\n const index = state.editingIndex\n const dirent = state.dirents[index]\n state.editingIndex = -1\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'hideRenameBox',\n /* index */ index,\n /* dirent */ dirent\n )\n}\n\n// TODO use posInSet and setSize properties to compute more effectively\n/**\n * @internal\n */\nexport const computeRenamedDirent = (dirents, index, newName) => {\n let startIndex = index\n let innerEndIndex = index + 1\n let insertIndex = -1\n let posInSet = -1\n const oldDirent = dirents[index]\n const newDirent = {\n ...oldDirent,\n name: newName,\n path: oldDirent.path.slice(0, -oldDirent.name.length) + newName,\n }\n const depth = newDirent.depth\n // TODO\n for (; startIndex >= 0; startIndex--) {\n const dirent = dirents[startIndex]\n if (dirent.depth > depth) {\n continue\n }\n if (dirent.depth < depth) {\n break\n }\n if (compareDirent(dirent, newDirent) === 1) {\n insertIndex = startIndex\n posInSet = dirent.posInSet\n // dirent.posInSet++\n } else {\n }\n }\n startIndex++\n for (; innerEndIndex < dirents.length; innerEndIndex++) {\n const dirent = dirents[innerEndIndex]\n if (dirent.depth <= depth) {\n break\n }\n dirent.path = newDirent.path + dirent.path.slice(oldDirent.path.length)\n }\n innerEndIndex--\n\n let endIndex = innerEndIndex + 1\n\n for (; endIndex < dirents.length; endIndex++) {\n const dirent = dirents[endIndex]\n if (dirent.depth > depth) {\n continue\n }\n if (dirent.depth < depth) {\n break\n }\n if (insertIndex === -1 && compareDirent(dirent, newDirent === -1)) {\n for (; endIndex < dirents.length; endIndex++) {\n const childDirent = dirents[endIndex]\n }\n insertIndex = endIndex\n posInSet = dirent.posInSet + 1\n }\n }\n endIndex--\n // console.log({endi /})\n\n for (let j = startIndex; j < index; j++) {\n const dirent = dirents[j]\n if (dirent.depth === depth) {\n dirent.posInSet++\n }\n }\n for (let j = index; j < endIndex; j++) {\n const dirent = dirents[j]\n if (dirent.depth === depth) {\n dirent.posInSet--\n }\n }\n\n // for (let j = startIndex; j < index; j++) {\n // const dirent = dirents[j]\n // dirent.posInSet++\n // }\n\n if (insertIndex === -1) {\n insertIndex = index\n return {\n focusedIndex: index,\n newDirents: [\n ...dirents.slice(0, index),\n newDirent,\n ...dirents.slice(index + 1),\n ],\n }\n }\n newDirent.posInSet = posInSet\n\n const newDirents = [...dirents]\n if (index < insertIndex) {\n insertIndex--\n }\n newDirents.splice(index, 1)\n newDirents.splice(insertIndex, 0, newDirent)\n\n return { newDirents, focusedIndex: insertIndex }\n}\n\nexport const acceptRename = async (state) => {\n const index = state.editingIndex\n state.editingIndex = -1\n const renamedDirent = state.dirents[index]\n const newDirentName = await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'hideRenameBox',\n /* index */ index,\n /* dirent */ renamedDirent\n )\n try {\n // TODO this does not work with rename of nested file\n const oldAbsolutePath = renamedDirent.path\n const newAbsolutePath = [state.root, newDirentName].join(\n state.pathSeparator\n )\n await FileSystem.rename(oldAbsolutePath, newAbsolutePath)\n } catch (error) {\n await ErrorHandling.showErrorDialog(error)\n return\n }\n const { dirents } = state\n const { newDirents, focusedIndex } = computeRenamedDirent(\n dirents,\n index,\n newDirentName\n )\n // TODO move focused index\n state.dirents = newDirents\n await contentLoaded(state)\n await focusIndex(state, focusedIndex)\n\n // await updateDirents(state)\n}\n\nexport const copyRelativePath = async (state) => {\n const dirent = getFocusedDirent(state)\n const relativePath = dirent.path.slice(1)\n // TODO handle error\n await Command.execute(\n /* ClipBoard.writeText */ 'ClipBoard.writeText',\n /* text */ relativePath\n )\n return state\n}\n\nexport const copyPath = async (state) => {\n const dirent = getFocusedDirent(state)\n // TODO windows paths\n // TODO handle error\n const path = dirent.path\n await Command.execute(\n /* ClipBoard.writeText */ 'ClipBoard.writeText',\n /* text */ path\n )\n return state\n}\n\nconst getContaingingFolder = (root, dirents, focusedIndex, pathSeparator) => {\n if (focusedIndex < 0) {\n return root\n }\n const dirent = dirents[focusedIndex]\n const direntPath = dirent.path\n const direntParentPath = direntPath.slice(0, -(dirent.name.length + 1))\n const path = `${direntParentPath}`\n return path\n}\n\nexport const openContainingFolder = async (state) => {\n const { focusedIndex, root, dirents, pathSeparator } = state\n const path = getContaingingFolder(root, dirents, focusedIndex, pathSeparator)\n await Command.execute('OpenNativeFolder.openNativeFolder', /* path */ path)\n return state\n}\n\nconst newDirent = async (state) => {\n // TODO do it like vscode, select position between folders and files\n const focusedIndex = state.focusedIndex\n const index = state.focusedIndex + 1\n if (focusedIndex >= 0) {\n const dirent = state.dirents[state.focusedIndex]\n if (dirent.type === DirentType.Directory) {\n // TODO handle error\n await handleClickDirectory(state, dirent, focusIndex)\n }\n }\n state.editingIndex = index\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'showCreateFileInputBox',\n /* index */ index\n )\n return state\n}\n\n// TODO much shared logic with newFolder\nexport const newFile = async (state) => {\n return newDirent(state)\n}\n\nconst cancelDirent = async (state) => {\n const index = state.editingIndex\n state.editingIndex = -1\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'hideCreateFileInputBox',\n /* index */ index\n )\n return state\n}\n\nexport const cancelNewFile = async (state) => {\n return cancelDirent()\n}\n\nconst getParentFolder = (dirents, index, root) => {\n if (index < 0) {\n return root\n }\n return dirents[index].path\n}\n\nconst acceptDirent = async (state, type) => {\n const editingIndex = state.editingIndex\n const focusedIndex = state.focusedIndex\n state.editingIndex = -1\n const newFileName = await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'hideCreateFileInputBox',\n /* index */ editingIndex\n )\n if (!newFileName) {\n // TODO show error message that file name must not be empty\n // below input box\n await ErrorHandling.showErrorDialog(\n new Error('file name must not be empty')\n )\n return state\n }\n const parentFolder = getParentFolder(state.dirents, focusedIndex, state.root)\n const absolutePath = [parentFolder, newFileName].join(state.pathSeparator)\n // TODO better handle error\n try {\n switch (type) {\n case DirentType.File:\n await FileSystem.writeFile(absolutePath, '')\n break\n case DirentType.Directory:\n await FileSystem.mkdir(absolutePath)\n break\n default:\n break\n }\n } catch (error) {\n await ErrorHandling.showErrorDialog(error)\n return\n }\n const parentDirent =\n focusedIndex >= 0\n ? state.dirents[focusedIndex]\n : {\n depth: 0,\n path: state.root,\n }\n const depth = parentDirent.depth + 1\n const newDirent = {\n path: absolutePath,\n posInSet: -1,\n setSize: 1,\n depth,\n name: newFileName,\n type,\n icon: '',\n }\n newDirent.icon = IconTheme.getIcon(newDirent)\n let insertIndex = state.focusedIndex\n let deltaPosInSet = 0\n let posInSet = 1\n let setSize = 1\n let i = Math.max(state.focusedIndex, -1) + 1\n for (; i < state.dirents.length; i++) {\n const dirent = state.dirents[i]\n if (dirent.depth !== depth) {\n break\n }\n const compareResult = compareDirent(dirent, newDirent)\n if (compareResult === 1) {\n insertIndex = i\n deltaPosInSet = 1\n } else {\n posInSet = dirent.posInSet + 1\n setSize = dirent.setSize + 1\n insertIndex = i\n }\n dirent.setSize++\n dirent.posInSet += deltaPosInSet\n }\n newDirent.setSize = setSize\n newDirent.posInSet = posInSet\n state.dirents.splice(insertIndex + 1, 0, newDirent)\n\n const newDirents = [...state.dirents]\n return {\n ...state,\n dirents: newDirents,\n }\n}\n\n// TODO much duplicate logic with acceptNewFolder\nexport const acceptNewFile = (state) => {\n return acceptDirent(state, DirentType.File)\n}\n\nexport const acceptNewFolder = (state) => {\n return acceptDirent(state, DirentType.Directory)\n}\n\n// TODO much copy paste with newFIle command\nexport const newFolder = async (state) => {\n return newDirent(state)\n}\n\nconst handleClickFile = async (state, dirent, index, keepFocus = false) => {\n await Command.execute(\n /* Main.openAbsolutePath */ 'Main.openUri',\n /* absolutePath */ dirent.path,\n /* focus */ !keepFocus\n )\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nconst handleClickDirectory = async (state, dirent, index) => {\n dirent.type = DirentType.DirectoryExpanding\n // TODO handle error\n const dirents = await getChildDirents(state.root, state.pathSeparator, dirent)\n const state2 = Viewlet.getState('Explorer')\n if (!state2) {\n return state\n }\n // TODO use Viewlet.getState here and check if it exists\n const newIndex = state2.dirents.indexOf(dirent)\n // TODO if viewlet is disposed or root has changed, return\n if (newIndex === -1) {\n return state\n }\n // console.log(state.dirents[index] === dirent)\n const newDirents = [...state2.dirents]\n newDirents.splice(newIndex + 1, 0, ...dirents)\n dirent.type = DirentType.DirectoryExpanded\n dirent.icon = IconTheme.getIcon(dirent)\n // TODO when focused index has changed while expanding, don't update it\n return {\n ...state,\n dirents: newDirents,\n focusedIndex: newIndex,\n }\n}\n\nconst handleClickDirectoryExpanding = async (state, dirent, index) => {\n dirent.type = DirentType.Directory\n dirent.icon = IconTheme.getIcon(dirent)\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nconst handleClickDirectoryExpanded = (state, dirent, index) => {\n dirent.type = DirentType.Directory\n dirent.icon = IconTheme.getIcon(dirent)\n const endIndex = getParentEndIndex(state.dirents, index)\n const removeCount = endIndex - index - 1\n // TODO race conditions and side effects are everywhere\n const newDirents = [...state.dirents]\n newDirents.splice(index + 1, removeCount)\n return {\n ...state,\n dirents: newDirents,\n focusedIndex: index,\n }\n}\n\nexport const handleClick = (state, index, keepFocus = false) => {\n if (index === -1) {\n return focusIndex(state, -1)\n }\n const actualIndex = index + state.minLineY\n console.log('actual index', actualIndex)\n const dirent = state.dirents[actualIndex]\n if (!dirent) {\n console.warn(`[explorer] dirent at index ${actualIndex} not found`, state)\n return state\n }\n // TODO dirent type should be numeric\n switch (dirent.type) {\n case DirentType.File:\n return handleClickFile(state, dirent, actualIndex, keepFocus)\n // TODO decide on one name\n case DirentType.Directory:\n return handleClickDirectory(state, dirent, actualIndex)\n case DirentType.DirectoryExpanding:\n return handleClickDirectoryExpanding(state, dirent, actualIndex)\n case DirentType.DirectoryExpanded:\n return handleClickDirectoryExpanded(state, dirent, actualIndex)\n case DirentType.Symlink:\n return handleClickSymLink(state, dirent, state.focusedIndex)\n default:\n break\n }\n}\n\nexport const handleClickAt = (state, x, y) => {\n const index = getIndexFromPosition(state, x, y)\n return handleClick(state, index)\n}\n\nexport const handleClickCurrent = (state) => {\n return handleClick(state, state.focusedIndex - state.minLineY)\n}\n\nexport const handleClickCurrentButKeepFocus = (state) => {\n return handleClick(\n state,\n state.focusedIndex - state.minLineY,\n /* keepFocus */ true\n )\n}\n\nexport const scrollUp = () => {}\n\nexport const scrollDown = () => {}\n// export const handleBlur=()=>{}\n\nconst handleClickSymLink = async (state, dirent, index) => {\n const realPath = await FileSystem.getRealPath(dirent.path)\n const type = await FileSystem.stat(realPath)\n switch (type) {\n case DirentType.File:\n return handleClickFile(state, dirent, index)\n default:\n throw new Error(`unsupported file type ${type}`)\n }\n}\n\nconst handleArrowRightDirectoryExpanded = (state, dirent) => {\n if (state.focusedIndex === state.dirents.length - 1) {\n return state\n }\n const nextDirent = state.dirents[state.focusedIndex + 1]\n if (nextDirent.depth === dirent.depth + 1) {\n return focusIndex(state, state.focusedIndex + 1)\n }\n}\n\nexport const handleArrowRight = async (state) => {\n if (state.focusedIndex === -1) {\n return state\n }\n const dirent = state.dirents[state.focusedIndex]\n switch (dirent.type) {\n case DirentType.File:\n return state\n case DirentType.Directory:\n return handleClickDirectory(state, dirent, state.focusedIndex)\n case DirentType.DirectoryExpanded:\n return handleArrowRightDirectoryExpanded(state, dirent)\n case DirentType.Symlink:\n return handleClickSymLink(state, dirent, state.focusedIndex)\n default:\n throw new Error(`unsupported file type ${dirent.type}`)\n }\n}\n\nconst focusParentFolder = (state) => {\n const parentStartIndex = getParentStartIndex(\n state.dirents,\n state.focusedIndex\n )\n if (parentStartIndex === -1) {\n return state\n }\n return focusIndex(state, parentStartIndex)\n}\n\nexport const handleArrowLeft = (state) => {\n if (state.focusedIndex === -1) {\n return state\n }\n const dirent = state.dirents[state.focusedIndex]\n switch (dirent.type) {\n case DirentType.Directory:\n case DirentType.File:\n return focusParentFolder(state)\n case DirentType.DirectoryExpanded:\n return handleClickDirectoryExpanded(state, dirent, state.focusedIndex)\n default:\n // TODO handle expanding directory and cancel file system call to read child dirents\n break\n }\n}\n\nexport const handleUpload = async (state, dirents) => {\n for (const dirent of dirents) {\n // TODO switch\n // TODO symlink might not be possible to be copied\n // TODO create folder if type is 2\n if (dirent.type === /* File */ 1) {\n // TODO reading text might be inefficient for binary files\n // but not sure how else to send them via jsonrpc\n const content = await dirent.file.text()\n const absolutePath = [state.root, dirent.file.name].join(\n state.pathSeparator\n )\n await FileSystem.writeFile(absolutePath, content)\n }\n }\n}\n\nconst cancelRequest = (state) => {}\n\nexport const dispose = (state) => {\n if (!state.pendingRequests) {\n return\n }\n for (const request of state.pendingRequests) {\n cancelRequest(request)\n }\n state.pendingRequests = []\n // if (state.lastFocusedWidget === context) {\n // state.lastFocusedWidget = undefined\n // }\n}\n\nconst IMAGE_EXTENSIONS = new Set([\n '.png',\n '.jpeg',\n '.jpg',\n '.gif',\n '.svg',\n '.ico',\n])\n\nconst getFileExtension = (file) => {\n return file.slice(file.lastIndexOf('.'))\n}\n\nconst isImage = (dirent) => {\n // TODO explorer state must be updated when changing folder\n // This is just a workaround\n if (!dirent) {\n return false\n }\n const fileExtension = getFileExtension(dirent.path)\n return IMAGE_EXTENSIONS.has(fileExtension)\n}\n\nexport const handleMouseEnter = async (state, index) => {\n const dirent = state.dirents[index]\n if (!isImage(dirent)) {\n // TODO preload content maybe when it is a long hover\n return state\n }\n const { top, itemHeight, left, root } = state\n const uri = `${root}${dirent.path}`\n const newTop = top + index * itemHeight\n const right = left\n await Command.execute(\n /* ImagePreview.show */ 9081,\n /* uri */ uri,\n /* top */ newTop,\n /* right */ right\n )\n}\n\n// TODO what happens when mouse leave and anther mouse enter event occur?\n// should update preview instead of closing and reopening\n\nexport const handleMouseLeave = async (state) => {\n // await Command.execute(/* ImagePreview.hide */ 9082)\n return state\n}\n\n// TODO on windows this would be different\nconst RE_PATH = /^\\/[a-z]+/\n\nconst isProbablyPath = (line) => {\n return RE_PATH.test(line)\n}\n\nconst getBaseName = (path, pathSeparator) => {\n return path.slice(path.lastIndexOf(pathSeparator) + 1)\n}\n\nexport const handleCopy = async (state) => {\n // TODO handle multiple files\n // TODO if not file is selected, what happens?\n const dirent = getFocusedDirent(state)\n if (!dirent) {\n console.info('[ViewletExplorer/handleCopy] no dirent selected')\n return\n }\n const absolutePath = dirent.path\n // TODO handle copy error gracefully\n const files = [absolutePath]\n await Command.execute(\n /* ClipBoard.writeNativeFiles */ 243,\n /* type */ 'copy',\n /* files */ files\n )\n}\n\nconst handlePasteNone = (state, nativeFiles) => {\n console.info('[ViewletExplorer/handlePaste] no paths detected')\n return state\n}\n\n// TODO add lots of tests for this\nexport const updateRoot = async () => {\n const state1 = Viewlet.getState('Explorer')\n if (state1.disposed) {\n return state1\n }\n // const file = nativeFiles.files[0]\n const topLevelDirents = await getTopLevelDirents(\n state1.root,\n state1.pathSeparator\n )\n const state2 = Viewlet.getState('Explorer')\n // TODO what if root changes while reading directories?\n if (state2.disposed || state2.root !== state1.root) {\n return state2\n }\n const newDirents = mergeDirents(state2.dirents, topLevelDirents)\n const state3 = {\n ...state2,\n dirents: newDirents,\n }\n return state3\n}\n\nconst handlePasteCopy = async (state, nativeFiles) => {\n // TODO handle pasting files into nested folder\n // TODO handle pasting files into symlink\n // TODO handle pasting files into broken symlink\n // TODO handle pasting files into hardlink\n // TODO what if folder is big and it takes a long time\n for (const source of nativeFiles.files) {\n const target = `${state.root}${state.pathSeparator}${getBaseName(\n source,\n state.pathSeparator\n )}`\n await FileSystem.copy(source, target)\n }\n const stateNow = Viewlet.getState('Explorer')\n if (stateNow.disposed) {\n return\n }\n // TODO only update folder at which level it changed\n return updateRoot()\n}\n\nconst handlePasteCut = async (state, nativeFiles) => {\n for (const source of nativeFiles.files) {\n const target = `${state.root}${state.pathSeparator}${getBaseName(source)}`\n await FileSystem.rename(source, target)\n }\n return state\n}\n\nconst NativeFileTypes = {\n None: 'none',\n Copy: 'copy',\n Cut: 'cut',\n}\n\nexport const handlePaste = async (state) => {\n const nativeFiles = await Command.execute(\n /* ClipBoard.readNativeFiles */ 'ClipBoard.readNativeFiles'\n )\n // TODO detect cut/paste event, not sure if that is possible\n // TODO check that pasted folder is not a parent folder of opened folder\n // TODO support pasting multiple paths\n // TODO what happens when pasting multiple paths, but some of them error?\n // how many error messages should be shown? Should the operation be undone?\n // TODO what if it is a large folder and takes a long time to copy? Should show progress\n // TODO what if there is a permission error? Probably should show a modal to ask for permission\n // TODO if error is EEXISTS, just rename the copy (e.g. file-copy-1.txt, file-copy-2.txt)\n // TODO actual target should be selected folder\n // TODO but what if a file is currently selected? Then maybe the parent folder\n // TODO but will it work if the folder is a symlink?\n // TODO handle error gracefully when copy fails\n switch (nativeFiles.type) {\n case NativeFileTypes.None:\n return handlePasteNone(state, nativeFiles)\n case NativeFileTypes.Copy:\n return handlePasteCopy(state, nativeFiles)\n case NativeFileTypes.Cut:\n return handlePasteCut(state, nativeFiles)\n default:\n throw new Error(`unexpected native paste type: ${nativeFiles.type}`)\n }\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n const { minLineY, itemHeight } = state\n const maxLineY = minLineY + Math.round(dimensions.height / itemHeight)\n return {\n ...state,\n ...dimensions,\n maxLineY,\n }\n}\n\nexport const expandAll = async (state) => {\n const { dirents, focusedIndex } = state\n if (focusedIndex === -1) {\n return state\n }\n const dirent = dirents[focusedIndex]\n const depth = dirent.depth\n const newDirents = [...dirents]\n // TODO fetch child dirents in parallel\n for (const dirent of newDirents) {\n if (dirent.depth === depth && dirent.type === DirentType.Directory) {\n // TODO expand\n // TODO avoid mutating state here\n dirent.type = DirentType.DirectoryExpanding\n // TODO handle error\n // TODO race condition\n const childDirents = await getChildDirents(\n state.root,\n state.pathSeparator,\n dirent\n )\n const newIndex = newDirents.indexOf(dirent)\n if (newIndex === -1) {\n continue\n }\n newDirents.splice(newIndex + 1, 0, ...childDirents)\n // TODO avoid mutating state here\n dirent.type = DirentType.DirectoryExpanded\n // await expand(state, dirent.index)\n }\n }\n return {\n ...state,\n dirents: newDirents,\n }\n}\n\nconst isTopLevel = (dirent) => {\n return dirent.depth === 1\n}\n\nconst toCollapsedDirent = (dirent) => {\n if (dirent.type === DirentType.DirectoryExpanded) {\n return {\n ...dirent,\n type: DirentType.Directory,\n }\n }\n return dirent\n}\n\nexport const collapseAll = (state) => {\n const newDirents = state.dirents.filter(isTopLevel).map(toCollapsedDirent)\n return {\n ...state,\n dirents: newDirents,\n }\n}\n\nexport const handleBlur = (state) => {\n // TODO when blur event occurs because of context menu, focused index should stay the same\n // but focus outline should be removed\n return {\n ...state,\n focused: false,\n }\n}\n\nconst getIndex = (dirents, uri) => {\n for (let i = 0; i < dirents.length; i++) {\n const dirent = dirents[i]\n if (dirent.path === uri) {\n return i\n }\n }\n return -1\n}\n\nconst getPathParts = (root, uri, pathSeparator) => {\n const parts = []\n let index = root.length - 1\n let depth = 0\n while ((index = uri.indexOf('/', index + 1)) !== -1) {\n console.log({ index, uri, root })\n const partUri = uri.slice(0, index)\n parts.push({ path: partUri, depth: depth++, root, pathSeparator })\n }\n return parts\n}\n\nconst getPathPartsToReveal = (root, pathParts, dirents) => {\n for (let i = 0; i < pathParts.length; i++) {\n const pathPart = pathParts[i]\n const index = getIndex(dirents, pathPart.uri)\n if (index === -1) {\n continue\n }\n return pathParts.slice(i)\n }\n return pathParts\n}\n\nconst getPathPartChildren = (pathPart) => {\n const children = getChildDirents(\n pathPart.root,\n pathPart.pathSeparator,\n pathPart\n )\n return children\n}\n\nconst mergeVisibleWithHiddenItems = (visibleItems, hiddenItems) => {\n const hiddenItemRoot = hiddenItems[0].path\n const merged = [...hiddenItems]\n const seen = Object.create(null)\n const unique = []\n for (const item of merged) {\n if (seen[item.path]) {\n continue\n }\n seen[item.path] = true\n unique.push(item)\n }\n const ordered = []\n\n // depth one\n // let depth=1\n // while(true){\n // for(const item of unique){\n // if(item.depth===depth){\n // ordered.push(item)\n // }\n // }\n // break\n // }\n // const getChildren = (path) => {\n // const children = []\n // for (const item of unique) {\n // if (item.path.startsWith(path) && item.path !== path) {\n // ordered.push(item)\n // }\n // }\n // return children\n // }\n // for (const item of unique) {\n // for (const potentialChild of unique) {\n // if (\n // potentialChild.path.startsWith(item.path) &&\n // potentialChild.path !== item.path\n // ) {\n // ordered.push(potentialChild)\n // }\n // }\n // }\n // const refreshedRoots = Object.create(null)\n // for (const hiddenItem of hiddenItems) {\n // const parent = hiddenItem.path.slice(0, hiddenItem.path.lastIndexOf('/'))\n // refreshedRoots[parent] = true\n // }\n // const mergedDirents = []\n // for(const v)\n // console.log({ hiddenItems })\n // for (const visibleItem of visibleItems) {\n // console.log({ visibleItem, hiddenItemRoot, hiddenItems })\n // if (visibleItem.path === hiddenItemRoot) {\n // // TODO update aria posinset and aria setsize\n // mergedDirents.push(...hiddenItems)\n // } else {\n // for (const hiddenItem of hiddenItems) {\n // if (hiddenItem.path === visibleItem.path) {\n // continue\n // }\n // }\n // mergedDirents.push(visibleItem)\n // }\n // }\n console.log({ unique })\n\n return unique\n}\n\nconst orderDirents = (dirents) => {\n if (dirents.length === 0) {\n return dirents\n }\n // const parentMap = Object.create(null)\n // for(const dirent of dirents){\n // const parentPath = dirent.slice(0, dirent.lastIndexOf('/'))\n // parentMap[parentPath]||=[]\n // parentMap[parentPath].push(dirent)\n // }\n const withDeepChildren = (parent) => {\n const children = []\n for (const dirent of dirents) {\n if (\n dirent.depth === parent.depth + 1 &&\n dirent.path.startsWith(parent.path)\n ) {\n children.push(dirent)\n }\n }\n return [parent, ...children]\n }\n const topLevelDirents = dirents.filter(isTopLevel)\n\n const ordered = topLevelDirents.flatMap(withDeepChildren)\n return ordered\n}\n\n// TODO maybe just insert items into explorer and refresh whole explorer\nconst revealItemHidden = async (state, uri) => {\n const { root, pathSeparator, dirents } = state\n const pathParts = getPathParts(root, uri, pathSeparator)\n const pathPartsToReveal = getPathPartsToReveal(root, pathParts, dirents)\n const pathPartsChildren = await Promise.all(\n pathPartsToReveal.map(getPathPartChildren)\n )\n const pathPartsChildrenFlat = pathPartsChildren.flat(1)\n const orderedPathParts = orderDirents(pathPartsChildrenFlat)\n console.log({ orderedPathParts })\n const mergedDirents = mergeVisibleWithHiddenItems(dirents, orderedPathParts)\n const index = getIndex(mergedDirents, uri)\n return {\n ...state,\n dirents: mergedDirents,\n focused: true,\n focusedIndex: index,\n }\n}\n\nconst revealItemVisible = (state, index) => {\n return {\n ...state,\n focused: true,\n focusedIndex: index,\n }\n}\n\nexport const revealItem = async (state, uri) => {\n Assert.object(state)\n Assert.string(uri)\n const dirents = state.dirents\n const index = getIndex(dirents, uri)\n if (index === -1) {\n return revealItemHidden(state, uri)\n }\n return revealItemVisible(state, index)\n}\n\nexport const shouldApplyNewState = (newState, fn) => {\n if (newState.root !== Workspace.state.workspacePath) {\n console.log(\n 'root does not match',\n `${newState.root} !== ${Workspace.state.workspacePath}`\n )\n return false\n }\n return true\n}\n\nexport const events = {\n 'languages.changed': handleLanguagesChanged,\n 'workspace.change': handleWorkspaceChange,\n 'iconTheme.change': handleIconThemeChange,\n}\n\nexport const hasFunctionalRender = true\n\nconst renderItems = {\n isEqual(oldState, newState) {\n return (\n oldState.dirents === newState.dirents &&\n oldState.minLineY === newState.minLineY &&\n oldState.maxLineY === newState.maxLineY\n )\n },\n apply(oldState, newState) {\n const visibleDirents = getVisible(newState)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'updateDirents',\n /* visibleDirents */ visibleDirents,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return (\n oldState.focusedIndex === newState.focusedIndex &&\n oldState.focused === newState.focused &&\n // TODO rendering dirents should not override focus\n // when that issue is fixed, this can be removed\n oldState.dirents === newState.dirents &&\n oldState.minLineY === newState.minLineY &&\n oldState.maxLineY === newState.maxLineY\n )\n },\n apply(oldState, newState) {\n const oldFocusedIndex = oldState.focused\n ? oldState.focusedIndex - oldState.minLineY\n : -2\n const newFocusedIndex = newState.focused\n ? newState.focusedIndex - newState.minLineY\n : -2\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'setFocusedIndex',\n /* oldindex */ oldFocusedIndex,\n /* newIndex */ newFocusedIndex,\n ]\n },\n}\n\nconst renderDropTargets = {\n isEqual(oldState, newState) {\n return oldState.dropTargets === newState.dropTargets\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Explorer',\n /* method */ 'setDropTargets',\n /* oldDropTargets */ oldState.dropTargets,\n /* newDropTargets */ newState.dropTargets,\n ]\n },\n}\n\nexport const render = [renderItems, renderDropTargets, renderFocusedIndex]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\nexport const create = (moduleName, importFn, key) => {\n const lazyCommand = async (editor, ...args) => {\n const module = await importFn()\n const fn = module[key]\n // editor might have changed during import, need to apply function to latest editor\n const latestEditor = ViewletStates.getState(moduleName)\n if (typeof fn !== 'function') {\n throw new Error(`${moduleName}.${key} is not a function`)\n }\n return fn(latestEditor, ...args)\n }\n return Viewlet.wrapViewletCommand(moduleName, lazyCommand)\n}\n", "import * as DirentType from '../DirentType/DirentType.js'\nimport { getChildDirents, getParentEndIndex } from './ViewletExplorerShared.js'\n\nconst makeExpanded = (dirent) => {\n if (dirent.type === DirentType.Directory) {\n return {\n ...dirent,\n type: DirentType.DirectoryExpanded,\n }\n }\n return dirent\n}\n\nexport const expandRecursively = async (state) => {\n const { dirents, focusedIndex, pathSeparator, root } = state\n const dirent =\n focusedIndex < 0\n ? {\n type: DirentType.Directory,\n path: root,\n depth: 0,\n }\n : dirents[focusedIndex]\n if (\n dirent.type !== DirentType.Directory &&\n dirent.type !== DirentType.DirectoryExpanding\n ) {\n return state\n }\n // TODO this is very inefficient\n const getChildDirentsRecursively = async (dirent) => {\n switch (dirent.type) {\n case DirentType.File:\n return [dirent]\n case DirentType.Directory:\n const childDirents = await getChildDirents(root, pathSeparator, dirent)\n const all = [makeExpanded(dirent)]\n for (const childDirent of childDirents) {\n const childAll = await getChildDirentsRecursively(childDirent)\n all.push(...childAll)\n }\n return all\n default:\n return []\n }\n }\n // TODO race condition: what if folder is being collapse while it is recursively expanding?\n // TODO race condition: what if folder is being deleted while it is recursively expanding?\n // TODO race condition: what if a new file/folder is created while the folder is recursively expanding?\n const childDirents = await getChildDirentsRecursively(dirent)\n const startIndex = focusedIndex\n if (focusedIndex >= 0) {\n const endIndex = getParentEndIndex(dirents, focusedIndex)\n const newDirents = [\n ...dirents.slice(0, startIndex),\n ...childDirents,\n ...dirents.slice(endIndex),\n ]\n return { ...state, dirents: newDirents }\n }\n return {\n ...state,\n dirents: childDirents.slice(1),\n }\n}\n", "export const focus = (state) => {\n if (state.focused) {\n return state\n }\n return {\n ...state,\n focused: true,\n }\n}\n", "import { focusIndex } from './ViewletExplorerFocusIndex.js'\n\nexport const focusFirst = (state) => {\n const { focusedIndex, dirents } = state\n if (dirents.length === 0 || focusedIndex === 0) {\n return state\n }\n return focusIndex(state, 0)\n}\n", "import { focusIndex } from './ViewletExplorerFocusIndex.js'\n\nexport const focusLast = (state) => {\n const { focusedIndex, dirents } = state\n if (dirents.length === 0 || focusedIndex === dirents.length - 1) {\n return state\n }\n return focusIndex(state, dirents.length - 1)\n}\n", "import { focusIndex } from './ViewletExplorerFocusIndex.js'\n\nexport const focusNext = (state) => {\n const { focusedIndex, dirents } = state\n if (focusedIndex === dirents.length - 1) {\n return state\n }\n return focusIndex(state, focusedIndex + 1)\n}\n", "import { focusIndex } from './ViewletExplorerFocusIndex.js'\n\nexport const focusNone = (state) => {\n return focusIndex(state, -1)\n}\n", "import { focusIndex } from './ViewletExplorerFocusIndex.js'\n\nexport const focusPrevious = (state) => {\n const { focusedIndex, dirents } = state\n switch (focusedIndex) {\n case -1:\n if (dirents.length === 0) {\n return state\n }\n return focusIndex(state, dirents.length - 1)\n case 0:\n return state\n default:\n return focusIndex(state, focusedIndex - 1)\n }\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const handleContextMenuKeyboard = async (state) => {\n const { focusedIndex, left, top, minLineY, itemHeight } = state\n const x = left\n const y = top + (focusedIndex - minLineY + 1) * itemHeight\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'explorer'\n )\n return state\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\nimport { getIndexFromPosition } from './ViewletExplorerShared.js'\n\nexport const handleContextMenuMouseAt = async (state, x, y) => {\n Assert.number(x)\n Assert.number(y)\n const focusedIndex = getIndexFromPosition(state, x, y)\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'explorer'\n )\n return {\n ...state,\n focusedIndex,\n focused: false,\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport { getIndexFromPosition } from './ViewletExplorerShared.js'\n\nconst isEqual = (a, b) => {\n if (a.length !== b.length) {\n return false\n }\n const length = a.length\n for (let i = 0; i < length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n return true\n}\n\nexport const handleDragOver = (state, x, y) => {\n Assert.number(x)\n Assert.number(y)\n const { dropTargets } = state\n const index = getIndexFromPosition(state, x, y)\n const newDropTargets = [index]\n if (isEqual(dropTargets, newDropTargets)) {\n return state\n }\n return {\n ...state,\n dropTargets: newDropTargets,\n }\n}\n", "import * as FileSystem from '../FileSystem/FileSystem.js'\nimport { getChildDirents } from './ViewletExplorerShared.js'\n\nconst mergeDirents = (oldDirents, newDirents) => {\n return newDirents\n}\n\n// TODO copy files in parallel\nconst copyFiles = async (root, pathSeparator, files) => {\n for (const file of files) {\n const from = file.path\n const to = root + pathSeparator + file.name\n await FileSystem.copy(from, to)\n }\n}\n\nexport const handleDropRoot = async (state, files) => {\n const { root, pathSeparator, dirents } = state\n await copyFiles(root, pathSeparator, files)\n const childDirents = await getChildDirents(root, pathSeparator, {\n path: root,\n depth: 0,\n })\n const mergedDirents = mergeDirents(dirents, childDirents)\n return {\n ...state,\n dirents: mergedDirents,\n dropTargets: [],\n }\n}\n", "import {\n getChildDirents,\n getParentStartIndex,\n} from './ViewletExplorerShared.js'\nimport * as DirentType from '../DirentType/DirentType.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport { handleDropRoot } from './ViewletExplorerHandleDropRoot.js'\n\nconst handleDropIntoFolder = async (state, dirent, index, files) => {\n console.log({ dirent, files })\n const { pathSeparator, root, dirents } = state\n for (const file of files) {\n const from = file.path\n const to = dirent.path + pathSeparator + file.name\n await FileSystem.copy(from, to)\n }\n const childDirents = await getChildDirents(root, pathSeparator, dirent)\n // TODO merge with child dirents\n const middleDirents = []\n const startIndex = index + 1\n const endIndex = index + 2\n const mergedDirents = [\n ...dirents.slice(0, startIndex),\n ...childDirents,\n ...dirents.slice(endIndex),\n ]\n\n // const mergedDirents = mergeDirents(dirents, childDirents)\n console.log({ childDirents })\n return {\n ...state,\n dirents: mergedDirents,\n dropTargets: [],\n }\n}\n\nconst handleDropIntoFile = (state, dirent, index, files) => {\n const { dirents } = state\n const parentIndex = getParentStartIndex(dirents, index)\n if (parentIndex === -1) {\n return handleDropRoot(state, files)\n }\n return handleDropIndex(parentIndex)\n}\n\nexport const handleDropIndex = (state, index, files) => {\n const { dirents } = state\n const dirent = dirents[index]\n // TODO if it is a file, drop into the folder of the file\n // TODO if it is a folder, drop into the folder\n // TODO if it is a symlink, read symlink and determine if file can be dropped\n switch (dirent.type) {\n case DirentType.Directory:\n return handleDropIntoFolder(state, dirent, index, files)\n case DirentType.File:\n return handleDropIntoFile(state, dirent, index, files)\n default:\n return state\n }\n}\n", "import { handleDropIndex } from './ViewletExplorerHandleDropIndex.js'\nimport { handleDropRoot } from './ViewletExplorerHandleDropRoot.js'\nimport { getIndexFromPosition } from './ViewletExplorerShared.js'\n\nexport const handleDrop = (state, x, y, files) => {\n const index = getIndexFromPosition(state, x, y)\n switch (index) {\n case -1:\n return handleDropRoot(state, files)\n default:\n return handleDropIndex(state, index, files)\n }\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletExplorer from './ViewletExplorer.js'\nimport * as LazyCommand from '../LazyCommand/LazyCommand.js'\n\n// prettier-ignore\nconst Imports = {\n ExpandRecursively: () => import('./ViewletExplorerExpandRecursively.js'),\n Focus: () => import('./ViewletExplorerFocus.js'),\n FocusFirst: () => import('./ViewletExplorerFocusFirst.js'),\n FocusIndex: () => import('./ViewletExplorerFocusIndex.js'),\n FocusLast: () => import('./ViewletExplorerFocusLast.js'),\n FocusNext: () => import('./ViewletExplorerFocusNext.js'),\n FocusNone: () => import('./ViewletExplorerFocusNone.js'),\n FocusPrevious: () => import('./ViewletExplorerFocusPrevious.js'),\n HandleContextMenuKeyboard: () => import('./ViewletExplorerHandleContextMenuKeyboard.js'),\n HandleContextMenuMouseAt: ()=>import('./ViewletExplorerHandleContextMenuMouseAt.js'),\n HandleDragOver: () => import('./ViewletExplorerHandleDragOver.js'),\n HandleDrop: () => import('./ViewletExplorerHandleDrop.js'),\n\n}\n\n// prettier-ignore\nexport const Commands = {\n 'Explorer.acceptNewFile': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.acceptNewFile),\n 'Explorer.acceptRename': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.acceptRename),\n 'Explorer.cancelNewFile': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.cancelNewFile),\n 'Explorer.cancelRename': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.cancelRename),\n 'Explorer.collapseAll': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.collapseAll),\n 'Explorer.copyPath': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.copyPath),\n 'Explorer.copyRelativePath': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.copyRelativePath),\n 'Explorer.expandAll': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.expandAll),\n 'Explorer.expandRecursively': LazyCommand.create('Explorer', Imports.ExpandRecursively, 'expandRecursively'),\n 'Explorer.focus': LazyCommand.create('Explorer', Imports.Focus, 'focus'),\n 'Explorer.focusFirst': LazyCommand.create('Explorer', Imports.FocusFirst, 'focusFirst'),\n 'Explorer.focusIndex': LazyCommand.create('Explorer', Imports.FocusIndex, 'focusIndex'),\n 'Explorer.focusLast': LazyCommand.create('Explorer', Imports.FocusLast, 'focusLast'),\n 'Explorer.focusNext': LazyCommand.create('Explorer', Imports.FocusNext, 'focusNext'),\n 'Explorer.focusNone': LazyCommand.create('Explorer', Imports.FocusNone, 'focusNone'),\n 'Explorer.focusPrevious': LazyCommand.create('Explorer', Imports.FocusPrevious, 'focusPrevious'),\n 'Explorer.getFocusedDirent': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.getFocusedDirent),\n 'Explorer.handleArrowLeft': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleArrowLeft),\n 'Explorer.handleArrowRight': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleArrowRight),\n 'Explorer.handleBlur': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleBlur),\n 'Explorer.handleClick': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleClick),\n 'Explorer.handleClickAt': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleClickAt),\n 'Explorer.handleClickCurrent': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleClickCurrent),\n 'Explorer.handleClickCurrentButKeepFocus': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleClickCurrentButKeepFocus),\n 'Explorer.handleContextMenuKeyboard': LazyCommand.create('Explorer', Imports.HandleContextMenuKeyboard, 'handleContextMenuKeyboard'),\n 'Explorer.handleContextMenuMouseAt': LazyCommand.create('Explorer', Imports.HandleContextMenuMouseAt, 'handleContextMenuMouseAt'),\n 'Explorer.handleCopy': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleCopy),\n 'Explorer.handleDragOver': LazyCommand.create('Explorer', Imports.HandleDragOver, 'handleDragOver'),\n 'Explorer.handleDrop': LazyCommand.create('Explorer', Imports.HandleDrop, 'handleDrop'),\n 'Explorer.handleMouseEnter': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleMouseEnter),\n 'Explorer.handleMouseLeave': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleMouseLeave),\n 'Explorer.handlePaste': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handlePaste),\n 'Explorer.handleWheel': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.handleWheel),\n 'Explorer.newFile': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.newFile),\n 'Explorer.newFolder': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.newFolder),\n 'Explorer.openContainingFolder': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.openContainingFolder),\n 'Explorer.removeDirent': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.removeDirent),\n 'Explorer.renameDirent': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.renameDirent),\n 'Explorer.revealItem': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.revealItem),\n 'Explorer.scrollDown': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.scrollDown),\n 'Explorer.scrollUp': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.scrollUp),\n 'Explorer.setDeltaY': Viewlet.wrapViewletCommand('Explorer', ViewletExplorer.setDeltaY),\n}\n\nexport * from './ViewletExplorer.js'\n", "export const name = 'RunAndDebug'\n\nexport const create = (id) => {\n return {\n id,\n disposed: false,\n }\n}\n\nexport const loadContent = async (state) => {\n return state\n}\n\nexport const contentLoaded = async (state) => {}\n\n// TODO make sure dispose is actually called\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const resize = (state, dimensions) => {\n return {\n newState: {\n ...state,\n ...dimensions,\n },\n commands: [],\n }\n}\n", "export * from './ViewletRunAndDebug.js'\n\nexport const Commands = {}\n", "const emptyObject = {}\n\nconst RE_PLACEHOLDER = /\\{(PH\\d+)\\}/g\n\n/**\n *\n * @param {string} key\n * @param {any} placeholders\n * @returns {string}\n */\nexport const i18nString = (key, placeholders = emptyObject) => {\n if (placeholders === emptyObject) {\n return key\n }\n const replacer = (match, rest) => {\n return placeholders[rest]\n }\n return key.replaceAll(RE_PLACEHOLDER, replacer)\n}\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\nexport const textSearch = async (scheme, root, query) => {\n const result = await SharedProcess.invoke(\n /* Search.search */ 'Search.search',\n /* folder */ root,\n /* searchTerm */ query\n )\n // TODO api is weird\n return result.results\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeTextSearchProvider = async (scheme, query) => {\n const result = await ExtensionHostShared.executeProviders({\n event: `onTextSearch:${scheme}`,\n method: 'ExtensionHostTextSearch.executeTextSearchProvider',\n params: [scheme, query],\n noProviderFoundMessage: 'no text search providers found',\n noProviderFoundResult: [],\n combineResults,\n })\n Assert.array(result)\n console.log({ result })\n return result\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as ExtensionHostTextSearch from '../ExtensionHost/ExtensionHostTextSearch.js'\n\nexport const textSearch = async (scheme, root, query) => {\n Assert.string(scheme)\n Assert.string(query)\n const results = await ExtensionHostTextSearch.executeTextSearchProvider(\n scheme,\n query\n )\n return results\n}\n", "import * as Assert from '../Assert/Assert.js'\n\nconst getProvider = (scheme) => {\n switch (scheme) {\n case 'file':\n return import('./TextSearchNode.js')\n default:\n return import('./TextSearchExtension.js')\n }\n}\n\nconst getScheme = (root) => {\n const colonSlashSlashIndex = root.indexOf('://')\n if (colonSlashSlashIndex === -1) {\n return 'file'\n }\n return root.slice(0, colonSlashSlashIndex)\n}\n\nexport const textSearch = async (root, query) => {\n Assert.string(root)\n Assert.string(query)\n const scheme = getScheme(root)\n const provider = await getProvider(scheme)\n const results = await provider.textSearch(scheme, root, query)\n return results\n}\n\nexport const cancel = async (searchId) => {\n // TODO\n // await SharedProcess.invoke(\n // /* Search.cancel */ 'Search.cancel',\n // /* searchId */ state.searchId\n // )\n}\n", "export const Preview = 'preview'\n\nexport const File = 'file'\n", "import * as Command from '../Command/Command.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as TextSearch from '../TextSearch/TextSearch.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as Compare from '../Compare/Compare.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as SearchResultType from '../SearchResultType/SearchResultType.js'\n// TODO maybe create should have a container as param like vscode?\n// maybe not?\n\n// const toList = ([fileName, previews]) => [\n// {\n// type: 'fileName',\n// text: `file: ${fileName}`,\n// },\n// ...previews.map(({ preview }) => ({\n// type: 'preview',\n// text: preview,\n// })),\n// ]\n\nconst SEARCH_ORDER_FILE_NAMES = 1\n\nexport const name = 'Search'\n\nexport const uiStrings = {\n NoResults: 'No results found',\n Oneresults: 'Found 1 result in 1 file',\n ManyResultsInOneFile: `Found {PH1} results in 1 file`,\n ManyResultsInManyFiles: `Found {PH1} results in {PH2} files`,\n}\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n searchResults: [],\n stats: {},\n searchId: -1,\n value: '',\n disposed: false,\n fileCount: 0,\n left,\n top,\n width,\n height,\n }\n}\n\nexport const loadContent = async (state) => {\n return state\n}\n\nexport const contentLoaded = async () => {}\n\nconst getStatusMessage = (resultCount, fileResultCount) => {\n if (resultCount === 0) {\n return I18nString.i18nString(uiStrings.NoResults)\n }\n if (resultCount === 1 && fileResultCount === 1) {\n return I18nString.i18nString(uiStrings.Oneresults)\n }\n if (fileResultCount === 1) {\n return I18nString.i18nString(uiStrings.ManyResultsInOneFile, {\n PH1: resultCount,\n })\n }\n return I18nString.i18nString(uiStrings.ManyResultsInManyFiles, {\n PH1: resultCount,\n PH2: fileResultCount,\n })\n}\n\nconst getResultCounts = (results) => {\n let resultCount = 0\n for (const result of results) {\n resultCount += result.length - 1\n }\n return resultCount\n}\n\n// TODO\nexport const setValue = async (state, value) => {\n // state.value = value\n // TODO use Id module\n // state.searchId = Math.random()\n // SharedProcess.send(\n // /* Search.search */ 907771,\n // /* id */ state.id,\n // /* searchId */ state.searchId\n // )\n // TODO\n try {\n const root = Workspace.state.workspacePath\n const results = await TextSearch.textSearch(root, value)\n const displayResults = toDisplayResults(results)\n console.log({ results, displayResults })\n const resultCount = getResultCounts(results)\n const fileResultCount = results.length\n const message = getStatusMessage(resultCount, fileResultCount)\n return {\n ...state,\n value,\n items: displayResults,\n message,\n }\n } catch (error) {\n return {\n ...state,\n message: `${error}`,\n value,\n }\n }\n}\n\nexport const dispose = async (state) => {\n // TODO cancel pending search\n if (state.state === 'searching') {\n await TextSearch.cancel(state.searchId)\n }\n return {\n ...state,\n disposed: true,\n }\n}\n\nconst getPath = (result) => {\n return result[0]\n}\n\nconst getPreviews = (result) => {\n return result[1]\n}\n\nconst compareResults = (resultA, resultB) => {\n const pathA = getPath(resultA)\n const pathB = getPath(resultB)\n return Compare.compareString(pathA, pathB)\n}\n\nconst toDisplayResults = (results) => {\n results.sort(compareResults)\n const displayResults = []\n for (const result of results) {\n const path = getPath(result)\n const previews = getPreviews(result)\n const absolutePath = Workspace.getAbsolutePath(path)\n const baseName = Workspace.pathBaseName(path)\n displayResults.push({\n title: absolutePath,\n type: SearchResultType.File,\n text: baseName,\n icon: IconTheme.getFileIcon({ name: baseName }),\n })\n for (const preview of previews) {\n displayResults.push({\n title: preview.preview,\n type: SearchResultType.Preview,\n text: preview.preview,\n icon: '',\n })\n }\n }\n return displayResults\n}\n// TODO implement virtual list, only send visible items to renderer process\n\n// TODO maybe rename to result.items and result.stats\n// TODO support streaming results\n// TODO support cancellation\n// TODO handle error\n// TODO use command.execute or use module directly?\n// TODO send results to renderer process\n// TODO use virtual list because there might be many results\n\nexport const handleInput = (state, value) => {\n return setValue(state, value)\n}\n\nconst getFileIndex = (items, index) => {\n console.log({ items })\n for (let i = index; i >= 0; i--) {\n const item = items[i]\n if (item.type === SearchResultType.File) {\n return i\n }\n }\n return -1\n}\n\nconst selectIndexFile = async (state, index) => {\n const searchResult = state.items[index]\n const path = searchResult.title\n Assert.string(path)\n await Command.execute(/* Main.openUri */ 'Main.openUri', /* uri */ path)\n return state\n}\n\nconst selectIndexPreview = async (state, index) => {\n const fileIndex = getFileIndex(state.items, index)\n if (fileIndex === -1) {\n throw new Error('Search result is missing file')\n }\n const searchResult = state.items[fileIndex]\n const path = searchResult.title\n Assert.string(path)\n await Command.execute(/* Main.openUri */ 'Main.openUri', /* uri */ path)\n return state\n}\n\nexport const selectIndex = async (state, index) => {\n const searchResult = state.items[index]\n switch (searchResult.type) {\n case SearchResultType.File:\n return selectIndexFile(state, index)\n case SearchResultType.Preview:\n return selectIndexPreview(state, index)\n default:\n throw new Error(`unexpected search result type ${searchResult.type}`)\n }\n}\n\nexport const handleContextMenuMouseAt = async (state, x, y) => {\n const index = 1\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'search'\n )\n return state\n}\n\nexport const handleContextMenuKeyboard = async (state) => {\n const index = 1\n const x = state.left // TODO\n const y = state.top // TODO\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'search'\n )\n return state\n}\n\nexport const handleClick = async (state, index) => {\n return selectIndex(state, index)\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n return {\n ...state,\n ...dimensions,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderItems = {\n isEqual(oldState, newState) {\n return oldState.items === newState.items\n },\n apply(oldState, newState) {\n return [\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Search',\n /* method */ 'setResults',\n /* results */ newState.items,\n /* resultCount */ newState.items.length,\n /* fileCount */ newState.fileCount,\n ]\n },\n}\n\nconst renderMessage = {\n isEqual(oldState, newState) {\n return oldState.message === newState.message\n },\n apply(oldState, newState) {\n return [\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Search',\n /* method */ 'setMessage',\n /* message */ newState.message,\n ]\n },\n}\n\nexport const render = [renderItems, renderMessage]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletSearch from './ViewletSearch.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Search.handleClick': Viewlet.wrapViewletCommand('Search', ViewletSearch.handleClick),\n 'Search.handleContextMenuKeyboard': Viewlet.wrapViewletCommand('Search', ViewletSearch.handleContextMenuKeyboard),\n 'Search.handleContextMenuMouseAt': Viewlet.wrapViewletCommand('Search', ViewletSearch.handleContextMenuMouseAt),\n 'Search.handleInput': Viewlet.wrapViewletCommand('Search', ViewletSearch.handleInput),\n 'Search.setValue': Viewlet.wrapViewletCommand('Search', ViewletSearch.setValue),\n}\n\nexport * from './ViewletSearch.js'\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nexport const acceptInput = async (text) => {\n return ExtensionHostShared.executeProvider({\n event: 'onSourceControl',\n method: 'ExtensionHost.sourceControlAcceptInput',\n params: [text],\n noProviderFoundMessage: 'No source control provider found',\n })\n}\n\nexport const getChangedFiles = async () => {\n return ExtensionHostShared.executeProvider({\n event: 'onSourceControl',\n method: 'ExtensionHost.sourceControlGetChangedFiles',\n params: [],\n noProviderFoundMessage: 'No source control provider found',\n })\n}\n\nexport const getFileBefore = (path) => {\n return ExtensionHostShared.executeProvider({\n event: 'onSourceControl',\n method: 'ExtensionHost.sourceControlGetFileBefore',\n params: [path],\n noProviderFoundMessage: 'No source control provider found',\n })\n}\n", "import * as ExtensionHostSourceControl from '../ExtensionHost/ExtensionHostSourceControl.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\n\n// TODO when accept input is invoked multiple times, it should not lead to errors\n\nexport const name = 'Source Control'\n\nexport const create = () => {\n return {\n merge: [],\n index: [],\n untracked: [],\n workingTree: [],\n disposed: false,\n inputValue: '',\n }\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const acceptInput = async (state, text) => {\n state.inputValue = text // TODO avoid side effect here\n await ExtensionHostSourceControl.acceptInput(text)\n return {\n ...state,\n inputValue: '',\n }\n}\n\nconst getChangedFiles = async () => {\n console.info('get changed files')\n const changedFiles = await ExtensionHostSourceControl.getChangedFiles()\n\n console.log({ changedFiles })\n\n return {\n index: [],\n merge: [],\n untracked: [],\n workingTree: changedFiles,\n gitRoot: '',\n }\n}\n\nexport const loadContent = async (state) => {\n const changedFiles = await getChangedFiles()\n return {\n ...state,\n index: changedFiles.index,\n merge: changedFiles.merge,\n untracked: changedFiles.untracked,\n workingTree: changedFiles.workingTree,\n gitRoot: changedFiles.gitRoot,\n }\n}\n\nexport const contentLoaded = async (state) => {\n // TODO\n // await RendererProcess.invoke(\n // /* Viewlet.send */ 'Viewlet.send',\n // /* id */ 'Source Control',\n // /* method */ 'setChangedFiles',\n // /* changedFiles */ state.changedFiles\n // )\n}\n\nexport const handleClick = async (state, index) => {\n const item = state.workingTree[index]\n const absolutePath = `${state.gitRoot}/${item.file}`\n // TODO handle error\n const [fileBefore, fileNow] = await Promise.all([\n ExtensionHostSourceControl.getFileBefore(item.file),\n FileSystem.readFile(absolutePath),\n ])\n const content = `before:\\n${fileBefore}\\n\\n\\nnow:\\n${fileNow}`\n // const content\n // await Main.openRawText(`diff://${absolutePath}`, content, 'plaintext')\n // await Main.openAbsolutePath(absolutePath)\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n return {\n ...state,\n ...dimensions,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderValue = {\n isEqual(oldState, newState) {\n return oldState.inputValue === newState.inputValue\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Source Control',\n /* method */ 'setInputValue',\n /* value */ newState.inputValue,\n ]\n },\n}\n\nexport const render = [renderValue]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletSourceControl from './ViewletSourceControl.js'\n\n// prettier-ignore\nexport const Commands = {\n '6532': Viewlet.wrapViewletCommand('Source Control',ViewletSourceControl.acceptInput)\n}\n\nexport * from './ViewletSourceControl.js'\n", "export const state = {\n id: 0,\n}\n\nexport const create = () => {\n return ++state.id\n}\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as Id from '../Id/Id.js'\n\nexport const name = 'Terminal'\n\nexport const create = () => {\n return {\n disposed: false,\n id: 0,\n }\n}\n\nexport const loadContent = async (state) => {\n // TODO this should be async and open a pty\n return {\n ...state,\n id: Id.create(),\n }\n}\n\nexport const contentLoaded = (state) => {\n // Terminal.refresh(state)\n}\n\nexport const contentLoadedEffects = async (state) => {\n // TODO this should be invoke\n SharedProcess.send(\n /* createTerminal */ 'Terminal.create',\n /* id */ state.id,\n /* cwd */ Workspace.state.workspacePath\n )\n}\n\nexport const handleData = async (state, data) => {\n // Terminal.handleData(state, data)\n const parsedData = new Uint8Array(data.data)\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Terminal',\n /* method */ 'write',\n /* data */ parsedData\n )\n}\n\nexport const write = async (state, input) => {\n await SharedProcess.invoke(\n /* Terminal.write */ 'Terminal.write',\n /* id */ state.id,\n /* input */ input\n )\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const resize = async (state, width, height) => {\n // TODO columnWidth etc. should be in renderer process\n const columnWidth = 8.43332\n const rowHeight = 14\n // const columns = Math.round(width / columnWidth)\n const columns = 7\n const rows = Math.round(height / rowHeight)\n await SharedProcess.invoke(\n /* Terminal.resize */ 'Terminal.resize',\n /* id */ state.id,\n /* columns */ columns,\n /* rows */ rows\n )\n\n // Terminal.resize(state, width, height)\n}\n\nexport const clear = async (state) => {\n await RendererProcess.invoke(\n /* ViewletTerminal.write */ 'Terminal.write',\n /* data */ new TextEncoder().encode('TODO clear terminal')\n )\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletTerminal from './ViewletTerminal.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Terminal.clear': Viewlet.wrapViewletCommand('Terminal', ViewletTerminal.clear),\n 'Terminal.write': Viewlet.wrapViewletCommand('Terminal', ViewletTerminal.write),\n}\n\nexport * from './ViewletTerminal.js'\n", "export const name = 'Debug Console'\n\nexport const create = () => {\n return {\n disposed: false,\n }\n}\n\nexport const loadContent = async (state) => {\n return state\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n", "export const Commands = {}\n\nexport * from './ViewletDebugConsole.js'\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as ExtensionManifestStatus from '../ExtensionManifestStatus/ExtensionManifestStatus.js'\n\nexport const install = (id) => {\n return SharedProcess.invoke(\n /* ExtensionManagement.install */ 'ExtensionManagement.install',\n /* id */ id\n )\n}\n\nexport const uninstall = (id) => {\n return SharedProcess.invoke(\n /* ExtensionManagement.uninstall */ 'ExtensionManagement.uninstall',\n /* id */ id\n )\n}\n\nexport const disable = async (id) => {\n return SharedProcess.invoke(\n /* ExtensionManagement.disable */ 'ExtensionManagement.disable',\n /* id */ id\n )\n}\n\nexport const enable = async (id) => {\n return SharedProcess.invoke(\n /* ExtensionManagement.enable */ 'ExtensionManagement.enable',\n /* id */ id\n )\n}\n\nexport const getAllExtensions = async () => {\n return SharedProcess.invoke(\n /* ExtensionManagement.getAllExtensions */ 'ExtensionManagement.getAllExtensions'\n )\n}\n\nconst isFulfilled = (result) => {\n return result.status === ExtensionManifestStatus.Resolved\n}\n\nconst getValue = (result) => {\n return result.value\n}\n\nexport const getWorkingExtensions = async () => {\n const allExtensions = await getAllExtensions()\n const fullFilledExtensions = allExtensions.filter(isFulfilled).map(getValue)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\n\nexport const getMarketplaceExtensions = async (props) => {\n const marketplaceUrl = await Platform.getMarketPlaceUrl()\n const options = {\n searchParams: props,\n }\n return Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ `${marketplaceUrl}/api/extensions/search`,\n /* options */ options\n )\n}\n", "export const ITEM_HEIGHT = 62\n\nexport const MINIMUM_SLIDER_SIZE = 20\n\nexport const HEADER_HEIGHT = 35.94 // TODO improve this\n\nexport const getListHeight = (state) => {\n return state.height - HEADER_HEIGHT\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as ExtensionManagement from '../ExtensionManagement/ExtensionManagement.js' // TODO use Command.execute instead\nimport * as ExtensionsMarketplace from '../ExtensionMarketplace/ExtensionMarketplace.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport {\n getListHeight,\n HEADER_HEIGHT,\n ITEM_HEIGHT,\n MINIMUM_SLIDER_SIZE,\n} from './ViewletExtensionsShared.js'\n\nconst SUGGESTIONS = [\n '@builtin',\n '@disabled',\n '@enabled',\n '@installed',\n '@outdated',\n '@sort:installs',\n '@id:',\n '@category',\n]\n\nexport const name = 'Extensions'\n\n// then state can be recycled by Viewlet when there is only a single ViewletExtensions instance\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n extensions: [],\n filteredExtensions: [],\n searchValue: '',\n parsedValue: {\n isLocal: true, // TODO flatten this\n query: '',\n },\n suggestionState: /* Closed */ 0,\n disposed: false,\n focusedIndex: -1,\n deltaY: 0,\n minLineY: 0,\n maxLineY: 0,\n width,\n height,\n negativeMargin: 0,\n scrollBarHeight: 0,\n handleOffset: 0,\n top,\n left,\n finalDeltaY: 2728,\n error: '',\n }\n}\n\nconst getVisible = (state) => {\n return state.filteredExtensions.slice(state.minLineY, state.maxLineY)\n}\n\nexport const loadContent = async (state) => {\n // TODO just get local extensions on demand (not when query string is already different)\n\n // TODO get installed extensions from extension host\n // TODO just get local extensions on demand (not when query string is already different)\n const extensions = await ExtensionManagement.getAllExtensions()\n const viewObjects = filterExtensions(\n extensions.map(toInstalledViewObject),\n state.parsedValue\n )\n\n const listHeight = getListHeight(state)\n const contentHeight = viewObjects.length * ITEM_HEIGHT\n const scrollBarHeight = getScrollBarHeight(state.height, contentHeight)\n\n console.log({ scrollBarHeight })\n return {\n ...state,\n extensions,\n filteredExtensions: viewObjects,\n maxLineY: Math.round(listHeight / ITEM_HEIGHT),\n scrollBarHeight,\n }\n}\n\nexport const contentLoaded = async (state) => {\n // if (state.searchValue === '') {\n // const visible = getVisible(state)\n // await RendererProcess.invoke(\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'Extensions',\n // /* method */ 'setExtensions',\n // /* viewObjects */ visible,\n // /* negativeMargin */ -state.deltaY\n // )\n // return\n // }\n // await RendererProcess.invoke(\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'Extensions',\n // /* method */ 'setExtensions',\n // /* viewObjects */ [],\n // /* negativeMargin */ 0\n // )\n}\n\nconst RE_PUBLISHER = /^[a-z\\d\\-]+/\n\n// TODO handle case when extension is of type number|array|null|string\nconst getPublisher = (extension) => {\n if (!extension || !extension.id) {\n return 'n/a'\n }\n // TODO handle case when id is not of type string -> should not crash application\n const match = extension.id.match(RE_PUBLISHER)\n if (!match) {\n return 'n/a'\n }\n return match[0]\n}\n\n// TODO all icon related logic should be here, not in renderer process\nconst getIcon = (extension) => {\n if (!extension || !extension.path || !extension.icon) {\n return ''\n }\n if (Platform.platform === 'remote') {\n return `/remote/${extension.path}/${extension.icon}` // TODO support windows paths\n }\n if (Platform.platform === 'electron') {\n return `/remote/${extension.path}/${extension.icon}` // TODO support windows paths\n }\n return ''\n}\n\nconst getName = (extension) => {\n if (extension && extension.name) {\n return extension.name\n }\n if (extension && extension.id) {\n return extension.id\n }\n return 'n/a'\n}\n\nconst getVersion = (extension) => {\n if (!extension || !extension.version) {\n return 'n/a'\n }\n return extension.version\n}\n\nconst getDescription = (extension) => {\n if (!extension || !extension.description) {\n return 'n/a'\n }\n return extension.description\n}\n\nconst getId = (extension) => {\n if (!extension || !extension.id) {\n return 'n/a'\n }\n return extension.id\n}\n\nconst toInstalledViewObject = (extension) => {\n return {\n name: getName(extension),\n publisher: getPublisher(extension),\n version: getVersion(extension),\n description: getDescription(extension),\n // TODO type field: builtin|marketplace|external\n // TODO should be status\n state: 'installed',\n id: getId(extension),\n icon: getIcon(extension),\n }\n}\n\nconst toDisabledViewObject = (extension) => {\n return {\n name: extension.name,\n publisher: extension.authorId || extension.publisher,\n version: extension.version,\n // TODO type field: builtin|marketplace|external\n // TODO should be status\n state: 'disabled',\n id: extension.id,\n }\n}\n\nexport const dispose = () => {}\n\nconst RE_PARAM = /@\\w+/g\n\n// TODO test sorting and filtering\nconst parseValue = (value) => {\n const parameters = Object.create(null)\n // TODO this is not very functional code (assignment)\n const replaced = value.replace(RE_PARAM, (match, by, order) => {\n if (match.startsWith('@installed')) {\n parameters.installed = true\n }\n if (match.startsWith('@enabled')) {\n parameters.enabled = true\n }\n if (match.startsWith('@disabled')) {\n parameters.disabled = true\n }\n if (match.startsWith('@builtin')) {\n parameters.builtin = true\n }\n if (match.startsWith('@sort')) {\n // TODO\n parameters.sort = 'installs'\n }\n if (match.startsWith('@id')) {\n // TODO\n parameters.id = 'abc'\n }\n if (match.startsWith('@outdated')) {\n parameters.outdated = true\n }\n return ''\n })\n const isLocal =\n parameters.enabled ||\n parameters.builtin ||\n parameters.disabled ||\n parameters.outdated\n return {\n query: replaced,\n isLocal,\n params: parameters,\n }\n}\n\nconst matchesParsedValue = (extension, parsedValue) => {\n // TODO handle error when extension.name is not of type string\n if (extension && extension.name) {\n return extension.name.includes(parsedValue.query)\n }\n // TODO handle error when extension id is not of type string\n if (extension && extension.id) {\n return extension.id.includes(parsedValue.query)\n }\n return false\n}\n\nconst filterExtensions = (extensions, parsedValue) => {\n const filteredExtensions = []\n for (const extension of extensions) {\n if (matchesParsedValue(extension, parsedValue)) {\n filteredExtensions.push(extension)\n }\n }\n // TODO make this more efficient / more functional\n for (let i = 0; i < filteredExtensions.length; i++) {\n filteredExtensions[i].setSize = filteredExtensions.length\n filteredExtensions[i].posInSet = i + 1\n filteredExtensions[i].top = i * ITEM_HEIGHT\n }\n return filteredExtensions\n}\n\nconst getExtensionsLocal = (parsedValue) => {\n // TODO get local extensions from shared process\n // return state.localExtensions\n return []\n}\n\nconst getExtensionsMarketplace = (parsedValue) => {\n return ExtensionsMarketplace.getMarketplaceExtensions({\n q: parsedValue.query,\n ...parsedValue.params,\n })\n}\n\nconst getExtensions = (parsedValue) => {\n if (parsedValue.isLocal) {\n return getExtensionsLocal(parsedValue)\n }\n return getExtensionsMarketplace(parsedValue)\n}\n\nconst toUiExtension = (extension, index) => {\n return {\n name: extension.name,\n authorId: extension.authorId,\n version: extension.version,\n id: extension.id,\n }\n}\n\nconst toDisplayExtensions = (extensions) => {\n const toDisplayExtension = (extension, index) => {\n return {\n name: extension.name,\n posInSet: index + 1,\n setSize: extensions.length,\n }\n }\n return extensions.map(toDisplayExtension)\n}\n\n// TODO debounce\nexport const handleInput = async (state, value) => {\n try {\n // TODO make this functional somehow\n state.searchValue = value\n // TODO cancel ongoing requests\n // TODO handle errors\n const parsedValue = parseValue(value)\n // TODO let not good here, error handling should be automatic,\n // exceptions handled by supervisor\n const extensions = await getExtensions(parsedValue)\n\n // TODO race condition: viewlet might already be disposed after this\n\n if (state.searchValue !== value) {\n return state\n }\n const filteredExtensions = filterExtensions(extensions, parsedValue)\n const displayExtensions = toDisplayExtensions(filteredExtensions)\n return {\n ...state,\n extensions,\n filteredExtensions,\n minLineY: 0,\n deltaY: 0,\n }\n\n // TODO handle out of order responses (a bit complicated)\n // for now just assume everything comes back in order\n } catch (error) {\n ErrorHandling.printError(error)\n return {\n ...state,\n error: `Failed to load extensions from marketplace: ${error}`,\n }\n }\n}\n\n// TODO lazyload this\n\n// TODO show error / warning when installment fails / times out\nexport const handleInstall = async (state, id) => {\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'installing'\n )\n try {\n await ExtensionManagement.install(/* id */ id)\n } catch (error) {\n // TODO have multi send command\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'uninstalled'\n )\n // TODO use command.execute\n ErrorHandling.handleError(error)\n return\n }\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'installed'\n )\n}\n\n// TODO lazyload this\nexport const handleUninstall = async (state, id) => {\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'uninstalling'\n )\n try {\n await ExtensionManagement.uninstall(id)\n } catch (error) {\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'installed'\n )\n ErrorHandling.handleError(error)\n return\n }\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'uninstalled'\n )\n}\n\n// TODO lazyload this\nexport const handleEnable = async (state, id) => {\n try {\n await ExtensionManagement.enable(id)\n } catch (error) {\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'disabled'\n )\n ErrorHandling.handleError(error)\n return\n }\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'enabled'\n )\n}\n\n// TODO lazyload this\nexport const handleDisable = async (state, id) => {\n try {\n await ExtensionManagement.disable(id)\n } catch (error) {\n console.error(error)\n ErrorHandling.handleError(error)\n return\n }\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensionState',\n /* id */ id,\n /* state */ 'disabled'\n )\n}\n\nconst handleContextMenuMouse = (state, x, y) => {}\n\nconst handleContextMenuIndex = (state, index) => {}\n\n// TODO pass index instead\nexport const handleContextMenu = async (state, x, y, index) => {\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'manageExtension'\n )\n return state\n}\n\nexport const openSuggest = async (state) => {\n const filteredSuggestions = SUGGESTIONS\n state.suggestionState = /* Open */ 1\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'openSuggest',\n /* suggestions */ filteredSuggestions\n )\n}\n\nexport const closeSuggest = async (state) => {\n state.suggestionState = /* Closed */ 0\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'closeSuggest'\n )\n}\n\nexport const toggleSuggest = async (state) => {\n switch (state.suggestionState) {\n case /* Closed */ 0:\n await openSuggest(state)\n break\n case /* Open */ 1:\n await closeSuggest(state)\n break\n default:\n break\n }\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n // TODO should just return new state, render function can take old state and new state and return render commands\n const listHeight = getListHeight(dimensions)\n const maxLineY = state.minLineY + Math.ceil(listHeight / ITEM_HEIGHT)\n return {\n ...state,\n ...dimensions,\n maxLineY,\n }\n}\n\nexport const setDeltaY = (state, deltaY) => {\n console.log({ deltaY })\n Assert.object(state)\n Assert.number(deltaY)\n const listHeight = getListHeight(state)\n if (deltaY < 0) {\n deltaY = 0\n } else if (\n deltaY >\n state.filteredExtensions.length * ITEM_HEIGHT - listHeight\n ) {\n deltaY = Math.max(\n state.filteredExtensions.length * ITEM_HEIGHT - listHeight,\n 0\n )\n }\n if (state.deltaY === deltaY) {\n return state\n }\n // TODO when it only moves by one px, extensions don't need to be rerendered, only negative margin\n const minLineY = Math.floor(deltaY / ITEM_HEIGHT)\n const maxLineY = minLineY + Math.round(listHeight / ITEM_HEIGHT)\n const negativeMargin = -Math.round(deltaY)\n return {\n ...state,\n deltaY,\n minLineY,\n maxLineY,\n negativeMargin,\n }\n // await scheduleExtensions(state)\n}\n\nexport const handleWheel = (state, deltaY) => {\n return setDeltaY(state, state.deltaY + deltaY)\n}\n\nconst getScrollBarHeight = (editorHeight, contentHeight) => {\n if (editorHeight > contentHeight) {\n return 0\n }\n return Math.max(\n Math.round(editorHeight ** 2 / contentHeight),\n MINIMUM_SLIDER_SIZE\n )\n}\n\nconst getNewPercent = (state, relativeY) => {\n if (relativeY <= state.height - state.scrollBarHeight / 2) {\n // clicked in middle\n return relativeY / (state.height - state.scrollBarHeight)\n }\n // clicked at bottom\n return 1\n}\n\nexport const handleScrollBarMove = (state, y) => {\n const relativeY = y - state.top - HEADER_HEIGHT - state.handleOffset\n console.log('handle offset', state.handleOffset)\n const newPercent = getNewPercent(state, relativeY)\n const newDeltaY = newPercent * state.finalDeltaY\n console.log({ relativeY, newPercent, newDeltaY })\n return setDeltaY(state, newDeltaY)\n}\n\nconst getNewDeltaPercent = (state, relativeY) => {\n if (relativeY <= state.scrollBarHeight / 2) {\n // clicked at top\n return 0\n }\n if (relativeY <= state.height - state.scrollBarHeight / 2) {\n // clicked in middle\n return (\n (relativeY - state.scrollBarHeight / 2) /\n (state.height - state.scrollBarHeight)\n )\n }\n // clicked at bottom\n return 1\n}\n\nexport const handleScrollBarClick = (state, y) => {\n const relativeY = y - state.top - HEADER_HEIGHT\n const newPercent = getNewDeltaPercent(state, relativeY)\n console.log({\n relativeY,\n top: state.top,\n headerHeight: HEADER_HEIGHT,\n newPercent,\n })\n const newDeltaY = newPercent * state.finalDeltaY\n\n return {\n ...setDeltaY(state, newDeltaY),\n handleOffset: state.scrollBarHeight / 2,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderExtensions = {\n isEqual(oldState, newState) {\n return (\n oldState.filteredExtensions === newState.filteredExtensions &&\n oldState.minLineY === newState.minLineY &&\n oldState.maxLineY === newState.maxLineY\n )\n },\n apply(oldState, newState) {\n const visibleExtensions = getVisible(newState)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setExtensions',\n /* visibleExtensions */ visibleExtensions,\n ]\n },\n}\n\nconst renderHeight = {\n isEqual(oldState, newState) {\n return (\n oldState.filteredExtensions.length === newState.filteredExtensions.length\n )\n },\n apply(oldState, newState) {\n const contentHeight = newState.filteredExtensions.length * ITEM_HEIGHT\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setContentHeight',\n /* contentHeight */ contentHeight,\n ]\n },\n}\n\nconst renderNegativeMargin = {\n isEqual(oldState, newState) {\n return oldState.negativeMargin === newState.negativeMargin\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setNegativeMargin',\n /* negativeMargin */ newState.negativeMargin,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return oldState.focusedIndex === newState.focusedIndex\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setFocusedIndex',\n /* oldFocusedIndex */ oldState.focusedIndex - oldState.minLineY,\n /* newFocusedIndex */ newState.focusedIndex - newState.minLineY,\n ]\n },\n}\n\nconst renderScrollBarY = {\n isEqual(oldState, newState) {\n return oldState.deltaY === newState.deltaY\n },\n apply(oldState, newState) {\n const scrollBarY =\n (newState.deltaY / newState.finalDeltaY) *\n (newState.height - newState.scrollBarHeight)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setScrollBar',\n /* scrollBarY */ scrollBarY,\n /* scrollBarHeight */ newState.scrollBarHeight,\n ]\n },\n}\n\nconst renderError = {\n isEqual(oldState, newState) {\n return oldState.error === newState.error\n },\n apply(oldState, newState) {\n return [\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Extensions',\n /* method */ 'setError',\n /* error */ newState.error,\n ]\n },\n}\n\nexport const render = [\n renderHeight,\n renderFocusedIndex,\n renderScrollBarY,\n renderNegativeMargin,\n renderExtensions,\n renderError,\n]\n", "import { getListHeight, ITEM_HEIGHT } from './ViewletExtensionsShared.js'\n\nexport const focusIndex = (state, index) => {\n if (index === -1) {\n return {\n ...state,\n focusedIndex: -1,\n }\n }\n const listHeight = getListHeight(state)\n if (index < state.minLineY + 1) {\n // scroll up\n const minLineY = index\n const maxLineY = minLineY + Math.ceil(listHeight / ITEM_HEIGHT)\n const negativeMargin = -minLineY * ITEM_HEIGHT\n return {\n ...state,\n focusedIndex: index,\n minLineY,\n maxLineY,\n negativeMargin,\n }\n }\n if (index >= state.maxLineY - 1) {\n // scroll down\n const maxLineY = index + 1\n const minLineY = maxLineY - Math.ceil(listHeight / ITEM_HEIGHT)\n const negativeMargin =\n -minLineY * ITEM_HEIGHT + (listHeight % ITEM_HEIGHT) - ITEM_HEIGHT\n return {\n ...state,\n focusedIndex: index,\n minLineY,\n maxLineY,\n negativeMargin,\n }\n }\n return {\n ...state,\n focusedIndex: index,\n }\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusFirst = (state) => {\n if (state.filteredExtensions.length === 0) {\n return state\n }\n return focusIndex(state, 0)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusLast = (state) => {\n if (state.filteredExtensions.length === 0) {\n return state\n }\n return focusIndex(state, state.filteredExtensions.length - 1)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusNext = (state) => {\n if (state.focusedIndex === state.filteredExtensions.length - 1) {\n return state\n }\n return focusIndex(state, state.focusedIndex + 1)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusNextPage = (state) => {\n if (state.focusedIndex === state.filteredExtensions.length - 1) {\n return state\n }\n const indexNextPage = Math.min(\n state.maxLineY + (state.maxLineY - state.minLineY) - 2,\n state.filteredExtensions.length - 1\n )\n return focusIndex(state, indexNextPage)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusPrevious = (state) => {\n if (state.focusedIndex === 0 || state.focusedIndex === -1) {\n return state\n }\n return focusIndex(state, state.focusedIndex - 1)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const focusPreviousPage = (state) => {\n if (state.focusedIndex === 0 || state.focusedIndex === -1) {\n return state\n }\n\n const indexPreviousPage = Math.max(\n state.minLineY - (state.maxLineY - state.minLineY) + 1,\n 0\n )\n return focusIndex(state, indexPreviousPage)\n}\n", "import { focusIndex } from './ViewletExtensionsFocusIndex.js'\n\nexport const handleClick = (state, index) => {\n return focusIndex(state, index)\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletExtensions from './ViewletExtensions.js'\nimport * as LazyCommand from '../LazyCommand/LazyCommand.js'\n\nconst Imports = {\n FocusFirst: () => import('./ViewletExtensionsFocusFirst.js'),\n FocusIndex: () => import('./ViewletExtensionsFocusIndex.js'),\n FocusLast: () => import('./ViewletExtensionsFocusLast.js'),\n FocusNext: () => import('./ViewletExtensionsFocusNext.js'),\n FocusNextPage: () => import('./ViewletExtensionsFocusNextPage.js'),\n FocusPrevious: () => import('./ViewletExtensionsFocusPrevious.js'),\n FocusPreviousPage: () => import('./ViewletExtensionsFocusPreviousPage.js'),\n HandleClick: () => import('./ViewletExtensionsHandleClick.js'),\n}\n\n// prettier-ignore\nexport const Commands = {\n 'Extensions.closeSuggest': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.closeSuggest),\n 'Extensions.focusFirst': LazyCommand.create('Extensions', Imports.FocusFirst, 'focusFirst'),\n 'Extensions.focusIndex': LazyCommand.create('Extensions', Imports.FocusIndex, 'focusIndex'),\n 'Extensions.focusLast': LazyCommand.create('Extensions', Imports.FocusLast, 'focusLast'),\n 'Extensions.focusNext': LazyCommand.create('Extensions', Imports.FocusNext, 'focusNext'),\n 'Extensions.focusNextPage': LazyCommand.create('Extensions', Imports.FocusNextPage, 'focusNextPage'),\n 'Extensions.focusPrevious': LazyCommand.create('Extensions', Imports.FocusPrevious, 'focusPrevious'),\n 'Extensions.focusPreviousPage': LazyCommand.create(Imports.FocusPreviousPage, 'focusPreviousPage'),\n 'Extensions.handleClick': LazyCommand.create('Extensions', Imports.HandleClick, 'handleClick'),\n 'Extensions.handleContextMenu': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleContextMenu),\n 'Extensions.handleInput': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleInput),\n 'Extensions.handleInstall': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleInstall),\n 'Extensions.handleScrollBarClick': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleScrollBarClick),\n 'Extensions.handleScrollBarMove': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleScrollBarMove),\n 'Extensions.handleUninstall': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleUninstall),\n 'Extensions.handleWheel': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.handleWheel),\n 'Extensions.openSuggest': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.openSuggest),\n 'Extensions.setDeltaY': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.setDeltaY),\n 'Extensions.toggleSuggest': Viewlet.wrapViewletCommand('Extensions', ViewletExtensions.toggleSuggest),\n}\n\nexport * from './ViewletExtensions.js'\n", "import * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\n\nexport const STATUS_OFF = 0\nexport const STATUS_LOADING = 1\nexport const STATUS_RUNNING = 2\nexport const STATUS_ERROR = 3\n\nexport const state = {\n status: STATUS_OFF, // TODO should be an enum state\n /**\n * @type {any[]}\n */\n readyCallbacks: [],\n seenEvents: [],\n extensionPromiseCache: Object.create(null),\n /**\n * @type {Promise<void>|undefined}\n */\n extensionHostPromise: undefined,\n\n /**\n * @type {any}\n */\n extensionHostWorker: undefined,\n /**\n * @type {any[]}\n */\n webExtensions: [],\n}\n\nexport const startNodeExtensionHost = async () => {\n switch (state.status) {\n case STATUS_LOADING:\n case STATUS_RUNNING:\n throw new Error('extension host is already starting')\n }\n state.status = STATUS_LOADING\n await SharedProcess.invoke(/* ExtensionHost.start */ 'ExtensionHost.start')\n state.status = STATUS_RUNNING\n for (const readyCallback of state.readyCallbacks) {\n readyCallback()\n }\n state.readyCallbacks = []\n // TODO handle error\n await SharedProcess.invoke(\n /* ExtensionHost.setWorkspaceRoot */ 'ExtensionHost.setWorkspaceRoot',\n /* root */ Workspace.getWorkspacePath()\n )\n}\n\nexport const startWebExtensionHost = async () => {\n const worker = new Worker(\n '/packages/extension-host-worker/src/extensionHostWorkerMain.js',\n {\n type: 'module',\n name: 'Extension Host',\n }\n )\n state.extensionHostWorker = worker\n}\n\nconst getWebExtensionManifest = async (path) => {\n const manifestPath = `${path}/extension.json`\n const manifest = await Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ manifestPath\n )\n return {\n ...manifest,\n path,\n }\n}\n\nexport const loadWebExtension = async (path) => {\n Assert.object(state.extensionHostWorker)\n const manifest = await getWebExtensionManifest(path)\n state.webExtensions.push(manifest)\n // TODO use invoke\n // await new Promise((resolve) => {\n // setTimeout(resolve, 120)\n // })\n // state.extensionHostWorker.postMessage({\n // jsonrpc: '2.0',\n // method: 'Extension.activate',\n // params: [name],\n // })\n}\n\nexport const invoke = async (ipc, method, ...params) => {\n // for (const extensionHost of state.extensionHosts) {\n // }\n // console.log({ args })\n // return SharedProcess.invoke(...args)\n // TODO use JSON rpc here or ipc.invoke\n throw new Error('not implemented')\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as ExtensionHost from '../ExtensionHost/ExtensionHostCore.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const getOutputChannels = () => {\n if (Platform.platform === PlatformType.Web) {\n return []\n }\n return ExtensionHost.invoke(\n /* ExtensionHostOutput.getOutputChannels */ 'ExtensionHostOutput.getOutputChannels'\n )\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Id from '../Id/Id.js'\n\nexport const state = {\n activeWidget: undefined,\n}\n\nexport const create = ({ getText }) => {\n state.activeWidget = {\n id: Id.create(),\n searchValue: '',\n // TODO how does find widget get text from editor? Both are complete separated\n // textContent: '',\n getText,\n }\n RendererProcess.invoke(\n /* FindWidget.create */ 4100,\n /* id */ state.activeWidget.id\n )\n}\n\nconst update = async (widget) => {\n const results = []\n const text = widget.getText()\n for (let i = 0; i < widget.textContent.length; i++) {\n if (text.slice(i).startsWith(widget.searchValue)) {\n results.push(i)\n }\n }\n RendererProcess.invoke(\n /* findWidgetSetResults */ 4103,\n /* id */ widget.id,\n /* results */ results\n )\n}\n\nexport const setValue = async (value) => {\n state.activeWidget.value = value\n update(state.activeWidget)\n}\n\nexport const previousMatch = () => {}\n\nexport const nextMatch = () => {}\n\nexport const dispose = () => {\n if (!state.activeWidget) {\n return\n }\n RendererProcess.invoke(\n /* FindWidget.dispose */ 4102,\n /* id */ state.activeWidget.id\n )\n state.activeWidget = undefined\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as ExtensionHostOutputChannel from '../ExtensionHost/ExtensionHostOutput.js'\n\nexport const name = 'Output'\n\nexport const create = () => {\n return {\n selectedIndex: -1,\n // TODO get list of outputChannels from extension host\n options: [],\n disposed: false,\n }\n}\n\nconst toExtensionHostOption = (outputChannel) => {\n return {\n name: outputChannel.id,\n file: outputChannel.path,\n }\n}\n\nexport const loadContent = async (state) => {\n // TODO get list of outputChannels from extension host\n\n const channels = await ExtensionHostOutputChannel.getOutputChannels()\n const options = [\n {\n name: 'Main',\n file: '/tmp/log-main.txt',\n },\n ...channels.map(toExtensionHostOption),\n ]\n const selectedIndex = 0\n // TODO duplicate send here\n await SharedProcess.invoke(\n /* OutputChannel.open */ 'OutputChannel.open',\n /* id */ 0,\n /* path */ options[selectedIndex].file\n )\n return {\n ...state,\n options,\n selectedIndex,\n }\n}\n\nexport const contentLoaded = async (state) => {\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Output',\n /* method */ 'setOptions',\n /* options */ state.options,\n /* selectedOptionIndex */ state.selectedIndex\n )\n}\n\nexport const setOutputChannel = async (state, option) => {\n state.selectedOption = option\n // TODO race condition\n await RendererProcess.invoke(\n /* viewletSend */ 'Viewlet.send',\n /* id */ 'Output',\n /* method */ 'clear'\n )\n // TODO race condition\n // TODO should use invoke\n await SharedProcess.invoke(\n /* OutputChannel.open */ 'OutputChannel.open',\n /* id */ 'Output',\n /* path */ state.selectedOption\n )\n}\n\nexport const handleData = async (state, data) => {\n console.log({ handleData: data })\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Output',\n /* method */ 'append',\n /* data */ data\n )\n}\n\nexport const dispose = async (state) => {\n state.disposed = true\n // TODO close output channel in shared process\n await SharedProcess.invoke(\n /* OutputChannel.close */ 'OutputChannel.close',\n /* id */ 'Output'\n )\n}\n\nexport const openFindWidget = async (state) => {\n // TODO use command.execute instead\n // TODO no lazy import here\n const FindWidget = await import('../FindWidget/FindWidget.js')\n FindWidget.create()\n}\n\nexport const closeFindWidget = async (state) => {\n // const FindWidget = await import('../FindWidget/FindWidget.js')\n // state\n // if(state.findWidget){\n // state.findWidget.dispose()\n // }\n}\n\nexport const handleError = (state, error) => {\n console.error(error)\n}\n", "export const Commands = {}\n\nexport * from './ViewletOutput.js'\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeDiagnosticProvider = (editor) => {\n return ExtensionHostShared.executeProviders({\n event: `onDiagnostic:${editor.languageId}`,\n method: 'ExtensionHost.executeDiagnosticProvider',\n params: [editor.id],\n noProviderFoundMessage: 'no diagnostic provider found',\n noProviderResult: [],\n combineResults,\n })\n}\n", "import * as ExtensionHostDiagnostic from '../ExtensionHost/ExtensionHostDiagnostic.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\nexport const name = 'Problems'\n\nexport const create = () => {\n return {\n problems: [],\n disposed: false,\n focusedIndex: -2,\n }\n}\n\nconst toProblem = (diagnostic) => {\n return diagnostic.message\n}\n\nexport const loadContent = async (state) => {\n const instance = ViewletStates.getInstance('EditorText')\n if (!instance) {\n return state\n }\n const editor = instance.state\n const diagnostics = await ExtensionHostDiagnostic.executeDiagnosticProvider(\n editor\n )\n const problems = diagnostics.map(toProblem)\n return {\n ...state,\n problems,\n }\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const focusIndex = (state, index) => {\n console.log({ index })\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderProblems = {\n isEqual(oldState, newState) {\n return oldState.problems === newState.problems\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Problems',\n /* method */ 'setProblems',\n /* problems */ newState.problems,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return oldState.focusedIndex === newState.focusedIndex\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'Problems',\n /* method */ 'setFocusedIndex',\n /* focusedIndex */ newState.focusedIndex,\n ]\n },\n}\n\nexport const render = [renderProblems, renderFocusedIndex]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletProblems from './ViewletProblems.js'\n\n// prettier-ignore\nexport const Commands = {\n 'ViewletProblems.focusIndex': Viewlet.wrapViewletCommand('Problems', ViewletProblems.focusIndex),\n}\n\nexport * from './ViewletProblems.js'\n", "export const create = (id) => {\n return {\n disposed: false,\n }\n}\n\nexport const loadContent = async (state) => {\n console.log('noop')\n return state\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n", "export const Commands = {}\n\nexport * from './ViewletNoop.js'\n", "/**\n * @enum number\n */\nexport const State = {\n TopLevelContent: 1,\n}\n\n/**\n * @enum number\n */\nexport const TokenType = {\n Text: 1,\n}\n\nexport const TokenMap = {\n [TokenType.Text]: 'Text',\n}\n\nexport const initialLineState = {\n state: State.TopLevelContent,\n}\n\nexport const tokenizeLine = (line, lineState) => {\n return {\n tokens: [\n {\n length: line.length,\n type: TokenType.Text,\n },\n ],\n state: lineState.state,\n }\n}\n", "import * as Languages from '../Languages/Languages.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as TokenizePlainText from './TokenizePlainText.js'\n\nexport const state = {\n tokenizers: Object.create(null),\n tokenizePaths: Object.create(null),\n listeners: [],\n pending: Object.create(null),\n}\n\nconst getTokenizePath = (languageId) => {\n const tokenizePath = Languages.getTokenizeFunctionPath(languageId)\n return tokenizePath\n}\n\n// TODO loadTokenizer should be invoked from renderer worker\nexport const loadTokenizer = async (languageId) => {\n if (languageId in state.tokenizers) {\n return\n }\n const tokenizePath = getTokenizePath(languageId)\n if (!tokenizePath) {\n return\n }\n try {\n // TODO check that tokenizer is valid\n // 1. tokenizeLine should be of type function\n // 2. getTokenClass should be of type function\n const tokenizer = await import(tokenizePath)\n if (typeof tokenizer.tokenizeLine !== 'function') {\n console.warn(\n `tokenizer.tokenizeLine should be a function in \"${tokenizePath}\"`\n )\n return\n }\n if (\n !tokenizer.TokenMap ||\n typeof tokenizer.TokenMap !== 'object' ||\n Array.isArray(tokenizer.TokenMap)\n ) {\n console.warn(\n `tokenizer.TokenMap should be an object in \"${tokenizePath}\"`\n )\n return\n }\n state.tokenizers[languageId] = tokenizer\n } catch (error) {\n state.tokenizers[languageId] = TokenizePlainText\n // TODO better error handling\n console.error(error)\n return\n }\n GlobalEventBus.emitEvent('tokenizer.changed', languageId)\n}\n\nexport const getTokenizer = (languageId) => {\n if (languageId in state.tokenizers) {\n return state.tokenizers[languageId]\n }\n if (languageId in state.pending) {\n return TokenizePlainText\n }\n return TokenizePlainText\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\n\nexport const applyEdits = (editor, cursor) => {\n // TODO multiple cursors\n console.assert(cursor)\n editor.cursor = cursor\n GlobalEventBus.emitEvent('editor.cursorChange', editor, cursor)\n}\n\nconst isInRange = (rowIndex, min, max) => {\n return rowIndex >= min && rowIndex <= max\n}\n\nconst getTokenIndex = (lineCache, endColumnIndex) => {\n if (!lineCache) {\n // throw new Error('no line cache found')\n return {\n index: -1,\n offset: -1,\n }\n }\n Assert.number(endColumnIndex)\n let offset = 0\n for (let i = 0; i < lineCache.tokens.length; i += 2) {\n const tokenLength = lineCache.tokens[i + 1]\n const newOffset = offset + tokenLength\n if (newOffset >= endColumnIndex) {\n return {\n index: i / 2,\n offset: endColumnIndex - offset,\n }\n }\n offset = newOffset\n }\n console.warn(`token at columnIndex ${endColumnIndex} not found`)\n return {\n index: -1,\n offset: -1,\n }\n}\n\nexport const getVisible = (editor) => {\n if (!editor.focused) {\n return []\n }\n if (Platform.isMobileOrTablet()) {\n const visibleCursors = []\n for (const selection of editor.selections) {\n if (isInRange(selection.end, editor.minLineY, editor.maxLineY)) {\n visibleCursors.push({\n rowIndex: selection.end.rowIndex - editor.minLineY,\n columnIndex: selection.end.columnIndex,\n })\n } else {\n }\n }\n return visibleCursors\n }\n // TODO could use uint16array here\n // TODO handle case when text segmenter not supported\n const visibleCursors = []\n const selections = editor.selections\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (isInRange(selectionEndRow, editor.minLineY, editor.maxLineY)) {\n const lineCache = editor.lineCache[selectionEndRow + 1]\n if (!lineCache) {\n console.log('line caches', editor, editor.lineCache)\n }\n const tokenIndex = getTokenIndex(lineCache, selectionEndColumn)\n // TODO maybe don't allocate object here, push numbers to flat array instead\n visibleCursors.push({\n top: (selectionEndRow - editor.minLineY) * editor.rowHeight,\n topIndex: selectionEndRow - editor.minLineY,\n leftIndex: tokenIndex.index,\n remainingOffset: tokenIndex.offset,\n })\n }\n }\n return visibleCursors\n}\n", "const clamp = (value, min, max) => {\n return Math.min(Math.max(value, min), max)\n}\n\n// TODO this should be in a separate scrolling module\nexport const setDeltaY = (editor, value) => {\n const newDeltaY = clamp(value, 0, editor.finalDeltaY)\n if (editor.deltaY === newDeltaY) {\n return editor\n }\n const newLineY = Math.floor(newDeltaY / 20)\n const newMaxLineY = editor.minLineY + editor.numberOfVisibleLines\n const scrollBarY =\n (newDeltaY / editor.finalDeltaY) * (editor.height - editor.scrollBarHeight)\n return {\n ...editor,\n minLineY: newLineY,\n maxLineY: newMaxLineY,\n deltaY: newDeltaY,\n scrollBarY,\n }\n}\n", "export const fromRange = (\n startRowIndex,\n startColumnIndex,\n endRowIndex,\n endColumnIndex\n) => {\n return new Uint32Array([\n startRowIndex,\n startColumnIndex,\n endRowIndex,\n endColumnIndex,\n ])\n}\n\nexport const fromRanges = (...items) => {\n return new Uint32Array(items.flat(1))\n}\n\nexport const fromPosition = (rowIndex, columnIndex) => {\n return fromRange(rowIndex, columnIndex, rowIndex, columnIndex)\n}\n\nexport const alloc = (length) => {\n return new Uint32Array(length)\n}\n\nexport const clone = (selections) => {\n return alloc(selections.length)\n}\n\nexport const map = (selections, fn) => {\n const newSelections = clone(selections)\n for (let i = 0; i < newSelections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n fn(\n newSelections,\n i,\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n )\n }\n return newSelections\n}\n\nexport const forEach = (selections, fn) => {\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n fn(\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n )\n }\n}\n\nexport const moveRangeToPosition = (selections, i, rowIndex, columnIndex) => {\n selections[i] = selections[i + 2] = rowIndex\n selections[i + 1] = selections[i + 3] = columnIndex\n}\n\nexport const isEmpty = (\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n) => {\n return (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n )\n}\n\nconst isSelectionSingleLine = (\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n) => {\n return selectionStartRow === selectionEndRow\n}\n\nexport const isEverySelection = (selections, fn) => {\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n !fn(\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n )\n ) {\n return false\n }\n }\n return true\n}\n\nexport const isEverySelectionEmpty = (selections) => {\n return isEverySelection(selections, isEmpty)\n}\n\nexport const isEverySelectionSingleLine = (selections) => {\n return isEverySelection(selections, isSelectionSingleLine)\n}\n\nexport const from = (array, getSelection) => {\n const newSelections = alloc(array.length * 4)\n let i = 0\n for (const item of array) {\n const { start, end } = getSelection(item)\n newSelections[i++] = start.rowIndex\n newSelections[i++] = start.columnIndex\n newSelections[i++] = end.rowIndex\n newSelections[i++] = end.columnIndex\n }\n return newSelections\n}\n\nexport const push = (\n selections,\n startRowIndex,\n startColumnIndex,\n endRowIndex,\n endColumnIndex\n) => {\n const oldLength = selections.length\n const newSelections = alloc(oldLength + 4)\n newSelections.set(selections)\n newSelections[oldLength + 1] = startRowIndex\n newSelections[oldLength + 2] = startColumnIndex\n newSelections[oldLength + 3] = endRowIndex\n newSelections[oldLength + 4] = endColumnIndex\n return newSelections\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nconst getSelectionFromChange = (change) => {\n if (change.inserted.length === 1) {\n const newPosition = {\n rowIndex: change.start.rowIndex + change.inserted.length - 1,\n columnIndex: change.inserted.at(-1).length + change.start.columnIndex,\n }\n return {\n start: newPosition,\n end: newPosition,\n }\n }\n const newPosition = {\n rowIndex: change.start.rowIndex + change.inserted.length - 1,\n columnIndex: change.inserted.at(-1).length,\n }\n return {\n start: newPosition,\n end: newPosition,\n }\n}\n\nexport const setSelections = (editor, selections) => {\n Assert.object(editor)\n Assert.uint32array(selections)\n return {\n ...editor,\n selections,\n }\n // editor.selections = selections\n // GlobalEventBus.emitEvent('editor.selectionChange', editor, selections)\n}\n\n// TODO maybe only accept sorted selection edits in the first place\n\n// TODO avoid allocating too many objects when creating new selection from changes\nexport const applyEdit = (editor, changes) => {\n Assert.object(editor)\n Assert.array(changes)\n const newSelections = EditorSelection.from(changes, getSelectionFromChange)\n // setSelections(editor, newSelections)\n return newSelections\n}\n\n// TODO visible selections could also be uint16array\n// [top1, left1, width1, height1, top2, left2, width2, height2...]\n\nexport const getVisible = (editor) => {\n const visibleSelections = []\n // // TODO binary search\n\n // // after\n const selections = editor.selections\n const minLineY = editor.minLineY\n const maxLineY = editor.maxLineY\n const rowHeight = editor.rowHeight\n const columnWidth = editor.columnWidth\n const lines = editor.lines\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n\n if (selectionEndRow < minLineY) {\n continue\n }\n if (selectionStartRow > maxLineY) {\n break\n }\n if (\n EditorSelection.isEmpty(\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n )\n ) {\n continue\n }\n if (selectionStartRow === selectionEndRow) {\n visibleSelections.push(\n /* top */ (selectionStartRow - minLineY) * rowHeight,\n /* left */ selectionStartColumn * columnWidth,\n /* width */ (selectionEndColumn - selectionStartColumn) * columnWidth,\n /* height */ rowHeight\n )\n } else {\n if (selectionStartRow >= minLineY) {\n visibleSelections.push(\n /* top */ (selectionStartRow - minLineY) * rowHeight,\n /*left */ selectionStartColumn * columnWidth,\n /* width */ (lines[selectionStartRow].length - selectionStartColumn) *\n columnWidth,\n /* height */ rowHeight\n )\n }\n const iMin = Math.max(selectionStartRow + 1, minLineY)\n const iMax = Math.min(selectionEndRow, maxLineY)\n for (let i = iMin; i < iMax; i++) {\n visibleSelections.push(\n /* top */ (i - minLineY) * rowHeight,\n /* left */ 0,\n /* width */ lines[i].length * columnWidth,\n /* height */ rowHeight\n )\n }\n if (selectionEndRow <= maxLineY) {\n visibleSelections.push(\n /* top */ (selectionEndRow - minLineY) * rowHeight,\n /* left */ 0,\n /* width */ selectionEndColumn * columnWidth,\n /* height */ rowHeight\n )\n }\n }\n }\n return new Uint32Array(visibleSelections)\n}\n", "const flattenTokensArray = (tokens) => {\n const flattened = []\n for (const token of tokens) {\n flattened.push(token.type, token.length)\n }\n return flattened\n}\n/**\n *\n * @param {(line:string, lineState)=>any} tokenizeLine\n * @param {string} line\n * @param {any} lineStateAtStart\n * @param {boolean} hasArrayReturn\n * @returns\n */\nexport const safeTokenizeLine = (\n tokenizeLine,\n line,\n lineStateAtStart,\n hasArrayReturn\n) => {\n try {\n const lineState = tokenizeLine(line, lineStateAtStart)\n if (!lineState || !lineState.tokens || !lineState.state) {\n throw new Error('invalid tokenization result')\n }\n if (!hasArrayReturn) {\n // workaround for old tokenizers\n lineState.tokens = flattenTokensArray(lineState.tokens)\n }\n return lineState\n } catch (error) {\n console.error(error)\n return {\n tokens: [/* type */ 0, /* length */ line.length],\n lineState: lineStateAtStart,\n }\n }\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as SafeTokenizeLine from '../SafeTokenizeLine/SafeTokenizeLine.js'\n\n// const getTokens = (editor) => {\n// const tokens = []\n// const lines = editor.lines\n// let lineState = editor.tokenizer.initialLineState\n// // TODO lineCache should probably only store endOfLineState\n// // because storing tokens could maybe result in high\n// // memory usage (e.g. 10000 lines * 10 tokens per line = 100 000 objects stored)\n// // on the other hand, scrolling should be really fast, and needlessly\n// // recomputing tokens would be a waste of cpu time and cause lots of garbage collection\n// const lineCache = editor.lineCache\n// // TODO only compute tokens in viewport\n// // console.log('minmax', editor.minLineY, editor.maxLineY)\n// // const cachedLineStates = Object.create(null)\n// // if(cachedLineStates[i])\n// const tokenizeLine = editor.tokenizer.tokenizeLine\n// for (let i = 0; i < lines.length; i++) {\n// if (lineCache[i]) {\n// // console.log('cached line')\n// tokens.push(lineCache[i].tokens)\n// continue\n// }\n// // TODO use TextDocument.getLine so that text document buffer implementation\n// // can be changed (e.g. vscode has piece tree, codemirror has something like chunked arrays / string[][])\n// const line = lines[i]\n// lineState = safeTokenizeLine(tokenizeLine, line, lineState)\n// const newTokens = lineState.tokens\n// lineCache[i] = lineState\n// tokens.push(newTokens)\n// }\n// return tokens\n// }\n\nconst getTokensFromCache = (result) => {\n return result.tokens\n}\n\n// TODO vscode has an interesting approach for tokenizing:\n// first, the viewport is tokenized from startLine to endLine\n// the first iteration might not be accurate because for example\n// there can be a open multiline comment at the start of the file\n// which is not taken into account for this first tokenization\n// but after some time (onIdle), the background tokenizer is invoked\n// that gives accurate results (but can take much longer since it\n// might need to parse from the start of the file)\n//\n// another approach would be to show plain text (non-highlighted)\n// when scrolling fast and the tokenizer is too slow to parse from\n// the start of the file\n//\n// the approach implemented below for tokenizing the viewport\n// is just to parse from the start of the file if necessary\n// that doesn't scale well for large files but it is simpler\n// to implement for now\n\n// TODO only send changed lines to renderer process instead of all lines in viewport\nconst getTokensViewport = (editor, startLineIndex, endLineIndex) => {\n const invalidStartIndex = editor.invalidStartIndex\n const lineCache = editor.lineCache\n if (endLineIndex <= invalidStartIndex) {\n return lineCache\n .slice(startLineIndex + 1, endLineIndex + 1)\n .map(getTokensFromCache)\n }\n const hasArrayReturn = editor.tokenizer.hasArrayReturn\n\n const tokenizeLine = editor.tokenizer.tokenizeLine\n if (startLineIndex <= invalidStartIndex) {\n for (let i = invalidStartIndex; i < endLineIndex; i++) {\n const lineState =\n i === 0 ? editor.tokenizer.initialLineState : editor.lineCache[i]\n const line = editor.lines[i]\n const result = SafeTokenizeLine.safeTokenizeLine(\n tokenizeLine,\n line,\n lineState,\n hasArrayReturn\n )\n // TODO if lineCacheEnd matches the one before, skip tokenizing lines after\n lineCache[i + 1] = result\n }\n editor.invalidStartIndex = endLineIndex\n return lineCache\n .slice(startLineIndex + 1, endLineIndex + 1)\n .map(getTokensFromCache)\n }\n // TODO combine for loops\n for (let i = invalidStartIndex; i < startLineIndex; i++) {\n const lineState = editor.lineCache[i]\n const line = editor.lines[i]\n const result = SafeTokenizeLine.safeTokenizeLine(\n tokenizeLine,\n line,\n lineState,\n hasArrayReturn\n )\n lineCache[i + 1] = result\n }\n for (let i = startLineIndex; i < endLineIndex; i++) {\n const lineState = editor.lineCache[i]\n const line = editor.lines[i]\n const result = SafeTokenizeLine.safeTokenizeLine(\n tokenizeLine,\n line,\n lineState,\n hasArrayReturn\n )\n lineCache[i + 1] = result\n editor.invalidStartIndex = endLineIndex\n }\n return lineCache\n .slice(startLineIndex + 1, endLineIndex + 1)\n .map(getTokensFromCache)\n}\n\nconst invalidateLine = (editor, index) => {\n editor.validLines[index] = false\n if (index < editor.invalidStartIndex) {\n editor.invalidStartIndex = index\n }\n}\n\nconst applyChangesToSyntaxHighlighting = (editor, changes) => {\n // TODO invalidate lines that are affected\n}\n\n// const getTokensIncremental = (editor, min, max) => {\n// const currentLength = editor.lineStateCache.length\n// const tokens = []\n// const lines = editor.lines\n// let lineState = editor.tokenizer.initialLineState\n// for (let i = currentLength; i < max; i++) {\n// const line = lines[i]\n// try {\n// lineState = editor.tokenizer.tokenizeLine(line, lineState)\n// if (!lineState || !lineState.tokens || !lineState.state) {\n// throw new Error('invalid tokenization result')\n// }\n// } catch (error) {\n// tokens.push([{ length: line.length, type: 0 }])\n// console.error(error)\n// // renderWithoutSyntaxHighlighting(state, firstRow, lastRow)\n// continue\n// }\n// const newTokens = lineState.tokens\n// tokens.push(newTokens)\n// }\n// return tokens\n// }\n\n// const getLineInfosIncremental = (editor, tokens, minLineY, maxLineY) => {\n// const result = []\n// const lines = editor.lines\n// const TokenMap = editor.tokenizer.TokenMap\n// for (let i = minLineY; i < maxLineY; i++) {\n// result.push(getLineInfo(lines[i], tokens[i], TokenMap))\n// }\n// return result\n// }\n\nconst getDecorationClassName = (type) => {\n switch (type) {\n case 2816:\n case 2817:\n case 2824:\n case 2825:\n case 2856:\n case 2857:\n case 3072:\n case 3073:\n case 3077:\n case 3088:\n return 'Function'\n case 1792:\n case 1793:\n return 'Parameter'\n case 512:\n case 513:\n case 769:\n case 1024:\n case 1536:\n case 1537:\n case 1544:\n case 1545:\n return 'Type'\n case 2048:\n case 2049:\n case 2056:\n case 2057:\n case 2064:\n case 2080:\n case 2081:\n case 2088:\n case 2089:\n case 2313:\n case 2560:\n case 2561:\n case 2569:\n case 2584:\n return 'VariableName'\n case 256:\n case 257:\n case 272:\n return 'Class'\n default:\n return `Unknown-${type}`\n }\n}\n\nconst getLineInfo = (line, tokens, decorations, TokenMap, lineOffset) => {\n let start = 0\n let end = 0\n const lineInfo = []\n let decorationIndex = 0\n for (; decorationIndex < decorations.length; decorationIndex += 3) {\n const decorationOffset = decorations[decorationIndex]\n if (decorationOffset >= lineOffset) {\n break\n }\n }\n\n // console.log({ tokens, decorations })\n for (let i = 0; i < tokens.length; i += 2) {\n const tokenType = tokens[i]\n const tokenLength = tokens[i + 1]\n const decorationOffset = decorations[decorationIndex]\n let extraClassName = ''\n if (\n decorationOffset !== undefined &&\n decorationOffset - lineOffset === start\n ) {\n const decorationLength = decorations[++decorationIndex]\n const decorationType = decorations[++decorationIndex]\n const decorationModifiers = decorations[++decorationIndex]\n // console.log('MATCHING DECORATION', {\n // decorationIndex,\n // decorationLength,\n // decorationType,\n // decorationModifiers,\n // })\n extraClassName = getDecorationClassName(decorationType)\n }\n\n end += tokenLength\n const text = line.slice(start, end)\n const className = `Token ${\n extraClassName || TokenMap[tokenType] || 'Unknown'\n }`\n lineInfo.push(text, className)\n start = end\n }\n return lineInfo\n}\n\n// TODO need lots of tests for this\nconst getLineInfosViewport = (\n editor,\n tokens,\n minLineY,\n maxLineY,\n minLineOffset\n) => {\n const result = []\n const lines = editor.lines\n const TokenMap = editor.tokenizer.TokenMap\n const decorations = editor.decorations\n let offset = minLineOffset\n for (let i = minLineY; i < maxLineY; i++) {\n const line = lines[i]\n result.push(\n getLineInfo(line, tokens[i - minLineY], decorations, TokenMap, offset)\n )\n offset += line.length + 1\n }\n return result\n}\n\nexport const getVisible = (editor) => {\n // console.log({ editor })\n // TODO should separate rendering from business logic somehow\n // currently hard to test because need to mock editor height, top, left,\n // invalidStartIndex, lineCache, etc. just for testing editorType\n // editor.invalidStartIndex = changes[0].start.rowIndex\n const minLineY = editor.minLineY\n const maxLineY = Math.min(\n editor.minLineY + editor.numberOfVisibleLines,\n editor.lines.length\n )\n const tokens = getTokensViewport(editor, minLineY, maxLineY)\n const minLineOffset = TextDocument.offsetAt(editor, minLineY, 0)\n const textInfos = getLineInfosViewport(\n editor,\n tokens,\n minLineY,\n maxLineY,\n minLineOffset\n )\n return textInfos\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Tokenizer from '../Tokenizer/Tokenizer.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as EditorCursor from './EditorCursor.js'\nimport * as EditorScrolling from './EditorScrolling.js'\nimport * as EditorSelection from './EditorSelection.js'\nimport * as EditorText from './EditorText.js'\n\nconst MINIMUM_SLIDER_SIZE = 20\n\n// TODO\nexport const create = (id, uri, languageId, content) => {\n const tokenizer = Tokenizer.getTokenizer(languageId)\n\n // TODO flatten structure\n return {\n uri,\n languageId,\n lines: content.split('\\n'),\n // TODO cursor should be part of selection,\n // codemirror has selections: Selection[]\n // selectionIndex: number\n\n // TODO how to get the trigger characters here from extension host\n completionTriggerCharacters: [],\n primarySelectionIndex: 0,\n selections: new Uint32Array([0, 0, 0, 0]),\n id,\n tokenizer,\n deltaY: 0,\n minLineY: 0,\n maxLineY: 0,\n numberOfVisibleLines: 0,\n finalY: 0,\n finalDeltaY: 0,\n height: 0,\n top: 0,\n left: 0,\n columnWidth: 0,\n rowHeight: 0,\n fontSize: 0, // TODO find out if it is possible to use all numeric values for settings for efficiency, maybe settings could be an array\n letterSpacing: 0,\n scrollBarHeight: 0,\n undoStack: [],\n // TODO maybe put these into separate tokenization module\n lineCache: [],\n validLines: [],\n invalidStartIndex: 0,\n decorations: [],\n focused: false,\n }\n}\n\nexport const dispose = (id) => {\n // delete state.editors[id]\n}\n\nexport const renderText = (editor) => {\n Assert.object(editor)\n const textInfos = EditorText.getVisible(editor)\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'renderText',\n /* scrollBarY */ editor.scrollBarY,\n /* scrollBarHeight */ editor.scrollBarHeight,\n /* textInfos */ textInfos,\n /* fontSize */ editor.fontSize, // TODO only send these properties once on first render\n /* lineHeight */ editor.rowHeight,\n /* letterSpacing */ editor.letterSpacing\n )\n}\n\nexport const renderTextAndCursorAndSelectionsCommands = (editor) => {\n Assert.object(editor)\n const textInfos = EditorText.getVisible(editor)\n const cursorInfos = EditorCursor.getVisible(editor)\n const selectionInfos = EditorSelection.getVisible(editor)\n const scrollBarHeight = editor.scrollBarHeight\n const scrollBarY =\n (editor.deltaY / editor.finalDeltaY) *\n (editor.height - editor.scrollBarHeight)\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'renderTextAndCursorsAndSelections',\n /* scrollBarY */ scrollBarY,\n /* scrollBarHeight */ scrollBarHeight,\n /* textInfos */ textInfos,\n /* cursorInfos */ cursorInfos,\n /* selectionInfos */ selectionInfos,\n ]\n}\n\nexport const renderTextAndCursorAndSelections = (editor) => {\n const commands = renderTextAndCursorAndSelectionsCommands(editor)\n RendererProcess.send(commands)\n}\n\nexport const setTokenizer = (editor, tokenizer) => {\n editor.tokenizer = Tokenizer.getTokenizer(editor.languageId)\n editor.invalidStartIndex = 0\n}\n\n// TODO\nexport const setDeltaYFixedValue = (editor, value) => {\n return EditorScrolling.setDeltaY(editor, value)\n // renderTextAndCursorAndSelections(editor)\n}\n\nexport const setDeltaY = (editor, value) => {\n return setDeltaYFixedValue(editor, editor.deltaY + value)\n}\n\nexport const scheduleSelections = (editor, selectionEdits) => {\n return EditorSelection.setSelections(editor, selectionEdits)\n // const cursorInfos = EditorCursor.getVisible(editor)\n // const selectionInfos = EditorSelection.getVisible(editor)\n // RendererProcess.send([\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'EditorText',\n // /* method */ 'renderCursorsAndSelections',\n // /* cursorInfos */ cursorInfos,\n // /* selectionInfos */ selectionInfos,\n // ])\n}\n\nexport const scheduleSelectionsAndScrollPosition = (\n editor,\n selectionEdits,\n deltaY\n) => {\n const newEditor1 = EditorSelection.setSelections(editor, selectionEdits)\n const newEditor2 = EditorScrolling.setDeltaY(newEditor1, deltaY)\n return newEditor2\n // EditorScrolling.setDeltaY(editor, deltaY)\n // EditorSelection.setSelections(editor, selectionEdits)\n // const cursorInfos = EditorCursor.getVisible(editor)\n // const selectionInfos = EditorSelection.getVisible(editor)\n // const textInfos = EditorText.getVisible(editor)\n // // TODO scrollbar calculation duplicate code\n // const scrollBarY =\n // (editor.deltaY / editor.finalDeltaY) *\n // (editor.height - editor.scrollBarHeight)\n // const scrollBarHeight = editor.scrollBarHeight\n // RendererProcess.send([\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'EditorText',\n // /* method */ 'renderTextAndCursorsAndSelections',\n // /* deltaY */ scrollBarY,\n // /* scrollBarHeight */ scrollBarHeight,\n // /* textInfos */ textInfos,\n // /* cursorInfos */ cursorInfos,\n // /* selectionInfos */ selectionInfos,\n // ])\n}\n\nexport const scheduleDocumentAndCursorsSelections = (editor, changes) => {\n Assert.object(editor)\n Assert.array(changes)\n if (changes.length === 0) {\n return editor\n }\n const newLines = TextDocument.applyEdits(editor, changes)\n const partialNewEditor = {\n ...editor,\n lines: newLines,\n }\n console.log({ partialNewEditor })\n const newSelections = EditorSelection.applyEdit(partialNewEditor, changes)\n // TODO should separate rendering from business logic somehow\n // currently hard to test because need to mock editor height, top, left,\n // invalidStartIndex, lineCache, etc. just for testing editorType\n const invalidStartIndex = Math.min(\n editor.invalidStartIndex,\n changes[0].start.rowIndex\n )\n\n // TODO maybe put undostack into indexeddb so that there is no memory leak in application\n // then clear old undostack from indexeddb after 3 days\n // TODO should push to undostack after rendering\n\n const newEditor = {\n ...partialNewEditor,\n lines: newLines,\n selections: newSelections,\n undoStack: [...editor.undoStack, changes],\n invalidStartIndex,\n }\n GlobalEventBus.emitEvent('editor.change', newEditor, changes)\n\n return newEditor\n // const textInfos = EditorText.getVisible(editor)\n // const cursorInfos = EditorCursor.getVisible(editor)\n // const selectionInfos = EditorSelection.getVisible(editor)\n\n // if (editor.undoStack) {\n // editor.undoStack.push(changes)\n // }\n // RendererProcess.send([\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'EditorText',\n // /* method */ 'renderTextAndCursorsAndSelections',\n // /* deltaY */ editor.deltaY,\n // /* scrollBarHeight */ editor.scrollBarHeight,\n // /* textInfos */ textInfos,\n // /* cursorInfos */ cursorInfos,\n // /* selectionInfos */ selectionInfos,\n // ])\n}\n\nexport const scheduleDocument = async (editor, changes) => {\n // console.log('before')\n // console.log([...editor.lines])\n const newLines = TextDocument.applyEdits(editor, changes)\n // console.log('after')\n // console.log([...editor.lines])\n const invalidStartIndex = changes[0].start.rowIndex\n // if (editor.undoStack) {\n // editor.undoStack.push(changes)\n // }\n // const cursorInfos = EditorCursor.getVisible(editor)\n // const selectionInfos = EditorSelection.getVisible(editor)\n // const textInfos = EditorText.getVisible(editor)\n // TODO scrollbar calculation duplicate code\n // const scrollBarY =\n // (editor.deltaY / editor.finalDeltaY) *\n // (editor.height - editor.scrollBarHeight)\n // const scrollBarHeight = editor.scrollBarHeight\n\n const newEditor = {\n ...editor,\n undoStack: [...editor.undoStack, changes],\n lines: newLines,\n invalidStartIndex,\n }\n // TODO change event should be emitted after rendering\n GlobalEventBus.emitEvent('editor.change', editor, changes)\n return newEditor\n // RendererProcess.send([\n // /* Viewlet.invoke */ 'Viewlet.send',\n // /* id */ 'EditorText',\n // /* method */ 'renderTextAndCursorsAndSelections',\n // /* deltaY */ scrollBarY,\n // /* scrollBarHeight */ scrollBarHeight,\n // /* textInfos */ textInfos,\n // /* cursorInfos */ cursorInfos,\n // /* selectionInfos */ selectionInfos,\n // ])\n}\n\nexport const hasSelection = (editor) => {\n // TODO editor.selections should always be defined\n return editor.selections && editor.selections.length > 0\n}\n\nexport const setBounds = (editor, top, left, height, columnWidth) => {\n const numberOfVisibleLines = Math.floor(height / 20)\n const maxLineY = Math.min(numberOfVisibleLines, editor.lines.length)\n const finalY = Math.max(editor.lines.length - numberOfVisibleLines, 0)\n const finalDeltaY = finalY * 20\n return {\n ...editor,\n top,\n left,\n height,\n columnWidth,\n numberOfVisibleLines,\n maxLineY,\n finalY,\n finalDeltaY,\n }\n}\n\nconst getScrollBarHeight = (editorHeight, contentHeight) => {\n if (editorHeight > contentHeight) {\n return 0\n }\n return Math.max(\n Math.round(editorHeight ** 2 / contentHeight),\n MINIMUM_SLIDER_SIZE\n )\n}\n\nexport const setText = (editor, text) => {\n const lines = text.split('\\n')\n const maxLineY = Math.min(editor.numberOfVisibleLines, lines.length)\n const finalY = Math.max(lines.length - editor.numberOfVisibleLines, 0)\n const finalDeltaY = finalY * 20\n const contentHeight = lines.length * editor.rowHeight\n const scrollBarHeight = getScrollBarHeight(editor.height, contentHeight)\n return {\n ...editor,\n lines,\n maxLineY,\n finalY,\n finalDeltaY,\n scrollBarHeight,\n }\n}\n\nconst renderLines = {\n isEqual(oldState, newState) {\n return (\n oldState.lines === newState.lines &&\n oldState.tokenizer === newState.tokenizer &&\n oldState.minLineY === newState.minLineY &&\n oldState.decorations === newState.decorations\n )\n },\n apply(oldState, newState) {\n const textInfos = EditorText.getVisible(newState)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'setText',\n /* textInfos */ textInfos,\n ]\n },\n}\n\nconst renderSelections = {\n isEqual(oldState, newState) {\n return (\n oldState.selections === newState.selections &&\n oldState.focused === newState.focused\n )\n },\n apply(oldState, newState) {\n const cursorInfos = EditorCursor.getVisible(newState)\n const selectionInfos = EditorSelection.getVisible(newState)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'setSelections',\n /* cursorInfos */ cursorInfos,\n /* selectionInfos */ selectionInfos,\n ]\n },\n}\n\nconst renderScrollBar = {\n isEqual(oldState, newState) {\n return (\n oldState.deltaY === newState.deltaY &&\n oldState.scrollBarHeight === newState.scrollBarHeight\n )\n },\n apply(oldState, newState) {\n const scrollBarY =\n (newState.deltaY / newState.finalDeltaY) *\n (newState.height - newState.scrollBarHeight)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'setScrollBar',\n /* scrollBarY */ scrollBarY,\n /* scrollBarHeight */ newState.scrollBarHeight,\n ]\n },\n}\n\nconst renderFocus = {\n isEqual(oldState, newState) {\n return oldState.focused === newState.focused\n },\n apply(oldState, newState) {\n if (!newState.focused) {\n return []\n }\n return [\n /* Viewlet.send */ 'Viewlet.invoke',\n /* id */ 'EditorText',\n /* method */ 'focus',\n ]\n },\n}\n\nexport const render = [\n renderLines,\n renderSelections,\n renderScrollBar,\n renderFocus,\n]\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeSemanticTokenProvider = (editor) => {\n return ExtensionHostShared.executeProviders({\n event: `onSemanticTokens:${editor.languageId}`,\n method: 'ExtensionHostSemanticTokens.executeSemanticTokenProvider',\n params: [editor.id],\n noProviderFoundMessage: 'No Semantic Token Provider found',\n noProviderFoundResult: [],\n combineResults,\n })\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as ExtensionHostSemanticTokens from '../ExtensionHost/ExtensionHostSemanticTokens.js'\n// import * as ExtensionHostTextDocument from '../ExtensionHost/ExtensionHostTextDocument.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as Tokenizer from '../Tokenizer/Tokenizer.js'\nimport * as Id from '../Id/Id.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\n\nconst COLUMN_WIDTH = 9 // TODO compute this automatically once\n\nconst getContent = async (uri) => {\n const content = await FileSystem.readFile(uri)\n return content ?? 'content could not be loaded'\n}\n\n// TODO how to connect this function with tokenizer?\nconst handleTokenizeChange = () => {\n const instances = ViewletStates.getAllInstances()\n const instance = instances.EditorText\n if (!instance) {\n console.log('no text editor')\n return\n }\n const state = instance.state\n const tokenizer = Tokenizer.getTokenizer(state.languageId)\n const newState = {\n ...instance.state,\n tokenizer,\n }\n Viewlet.setState('EditorText', newState)\n}\n\nexport const name = 'EditorText'\n\n// TODO uri?\nexport const create = (id, uri, left, top, width, height) => {\n const instanceId = Id.create()\n const state = Editor.create(instanceId, uri, 'unknown', '')\n const newState = Editor.setBounds(state, top, left, height, COLUMN_WIDTH)\n const languageId = Languages.getLanguageId(uri)\n return {\n ...newState,\n uri,\n rowHeight: 20,\n languageId,\n }\n}\n\nexport const loadContent = async (state) => {\n const rowHeight = Preferences.get('editor.lineHeight') || 20\n const fontSize = Preferences.get('editor.fontSize') || 15 // TODO find out if it is possible to use all numeric values for settings for efficiency, maybe settings could be an array\n const letterSpacing = Preferences.get('editor.letterSpacing') || 0.5\n const languageId = Languages.getLanguageId(state.uri)\n const tokenizer = Tokenizer.getTokenizer(languageId)\n const content = await getContent(state.uri)\n const newState = Editor.setText(state, content)\n return {\n ...newState,\n rowHeight,\n fontSize,\n letterSpacing,\n tokenizer,\n }\n}\n\nexport const contentLoaded = async (state) => {\n // Editor.renderText(state)\n}\n\nconst updateSemanticTokens = async (state) => {\n try {\n const newSemanticTokens =\n await ExtensionHostSemanticTokens.executeSemanticTokenProvider(state)\n await Command.execute(\n /* Editor.setDecorations */ 'Editor.setDecorations',\n /* decorations */ newSemanticTokens\n )\n // TODO apply semantic tokens to editor and rerender\n // TODO possibly overlay semantic tokens as decorations\n } catch (error) {\n if (\n error &&\n error instanceof Error &&\n error.message.startsWith(\n 'Failed to execute semantic token provider: VError: no semantic token provider found for'\n )\n ) {\n return\n }\n console.error(error)\n }\n}\n\nconst handleEditorChange = async (editor, changes) => {\n // await ExtensionHostTextDocument.handleEditorChange(editor, changes)\n // TODO check if semantic highlighting is enabled in settings\n await updateSemanticTokens(editor)\n}\n\nexport const contentLoadedEffects = async (state) => {\n // TODO dispose listener\n // TODO don't like side effect here, where to put it?\n GlobalEventBus.addListener('languages.changed', handleLanguagesChanged)\n GlobalEventBus.addListener('tokenizer.changed', handleTokenizeChange)\n GlobalEventBus.addListener('editor.change', handleEditorChange)\n const newLanguageId = Languages.getLanguageId(state.uri)\n await Command.execute(\n /* Editor.setLanguageId */ 'Editor.setLanguageId',\n /* languageId */ newLanguageId\n )\n // await ExtensionHostTextDocument.handleEditorCreate(state)\n // TODO check if semantic highlighting is enabled in settings\n await updateSemanticTokens(state)\n GlobalEventBus.emitEvent('editor.create', state)\n}\n\nconst handleLanguagesChanged = async () => {\n const instances = ViewletStates.getAllInstances()\n const instance = instances.EditorText\n if (!instance) {\n console.log('no text editor')\n return\n }\n const state = instance.state\n const newLanguageId = Languages.getLanguageId(state.uri)\n state.languageId = newLanguageId\n // await ExtensionHostTextDocument.handleEditorLanguageChange(state)\n // if (state.languageId === newLanguageId) {\n // return\n // }\n // await Promise.all([\n // Editor.setLanguageId(state, newLanguageId),\n // ])\n await Command.execute(\n /* Editor.setLanguageId */ 'Editor.setLanguageId',\n /* languageId */ newLanguageId\n )\n\n const newEditor = instances.EditorText.state\n\n GlobalEventBus.emitEvent('editor.languageChange', newEditor, newLanguageId)\n // console.log({ state })\n}\n\nexport const resize = (state, dimensions) => {\n const newState = Editor.setBounds(\n state,\n dimensions.top,\n dimensions.left,\n dimensions.height,\n state.columnWidth\n )\n const commands = [Editor.renderTextAndCursorAndSelectionsCommands(newState)]\n return {\n newState,\n commands,\n }\n}\n\nexport const hasFunctionalRender = true\n\nexport const render = Editor.render\n\nexport const focus = (state) => {\n return {\n ...state,\n focused: true,\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as Assert from '../Assert/Assert.js'\n\nexport const editorApplyEdit = async (editor, changes) => {\n Assert.object(editor)\n Assert.array(changes)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "export const state = {\n blurListeners: [],\n}\n\nexport const editorBlur = (editor) => {\n // for (const listener of state.blurListeners) {\n // listener(editor)\n // }\n // TODO save on blur\n // Command.execute(/* Main.save */ 89)\n return {\n ...editor,\n focused: false,\n }\n}\n\nexport const registerListener = (fn) => {\n state.blurListeners.push(fn)\n}\n\nexport const removeListener = (fn) => {\n state.blurListeners.splice(state.blurListeners.indexOf(fn), 1)\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\nimport * as Assert from '../Assert/Assert.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeBraceCompletionProvider = (\n editor,\n offset,\n openingBrace\n) => {\n Assert.object(editor)\n Assert.number(offset)\n Assert.string(openingBrace)\n return ExtensionHostShared.executeProviders({\n event: `onBraceCompletion:${editor.languageId}`,\n method: 'ExtensionHostBraceCompletion.executeBraceCompletionProvider',\n params: [editor.id, offset, openingBrace],\n noProviderFoundMessage: 'no brace completion providers found',\n noProviderFoundResult: undefined,\n combineResults,\n })\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\n\nexport const editorReplaceSelections = (editor, replacement, origin) => {\n const changes = []\n const selections = editor.selections\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const start = {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn,\n }\n const end = {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n }\n const selection = {\n start,\n end,\n }\n changes.push({\n start: start,\n end: end,\n inserted: replacement,\n deleted: TextDocument.getSelectionText(editor, selection),\n origin,\n })\n }\n return changes\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeTabCompletionProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onTabCompletion:${editor.languageId}`,\n method: 'ExtensionHost.executeTabCompletionProvider',\n params: [editor.id, offset],\n noProviderFoundMessage: 'No tab completion provider found',\n noProviderFoundResult: undefined,\n combineResults,\n })\n}\n", "import * as Assert from '../Assert/Assert.js'\n\nexport const at = (editor, x, y, offset) => {\n Assert.object(editor)\n Assert.number(x)\n Assert.number(y)\n Assert.number(offset)\n const rowIndex = Math.max(\n Math.floor((y - editor.top + editor.deltaY) / editor.rowHeight),\n 0\n )\n const columnIndex = offset\n return {\n rowIndex,\n columnIndex,\n }\n}\n\n/**\n * @deprecated this doesn't work for variable width characters (unicode/emoji).\n * Use position computation in renderer process instead\n *\n * @param {object} editor\n * @param {number} rowIndex\n * @param {number} columnIndex\n * @returns\n */\nexport const x = (editor, rowIndex, columnIndex) => {\n const x = columnIndex * editor.columnWidth + editor.left\n return x\n}\n\nexport const y = (editor, rowIndex, columnIndex) => {\n const y = (rowIndex + 1) * editor.rowHeight + editor.top\n return y\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nexport const state = {\n timeout: -1,\n}\n\n/**\n *\n * @param {any} editor\n * @param {number} rowIndex\n * @param {number} columnIndex\n * @param {string} message\n * @param {boolean} isError\n * @returns\n */\nexport const editorShowMessage = async (\n editor,\n rowIndex,\n columnIndex,\n message,\n isError\n) => {\n Assert.object(editor)\n Assert.number(rowIndex)\n Assert.number(columnIndex)\n Assert.string(message)\n const x = EditorPosition.x(editor, rowIndex, columnIndex)\n const y = EditorPosition.y(editor, rowIndex, columnIndex)\n const displayErrorMessage = message\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'showOverlayMessage',\n /* x */ x,\n /* y */ y,\n /* content */ displayErrorMessage\n )\n\n if (!isError) {\n const handleTimeout = () => {\n console.log('ran timeout fn')\n editorHideMessage(editor)\n }\n\n // TODO use wrapper timing module instead of this\n // @ts-ignore\n state.timeout = setTimeout(handleTimeout, 3_000)\n }\n return editor\n}\n\n/**\n *\n * @param {any} editor\n * @param {number} rowIndex\n * @param {number} columnIndex\n * @param {string} message\n * @returns\n */\nexport const showErrorMessage = (editor, rowIndex, columnIndex, message) => {\n return editorShowMessage(\n editor,\n rowIndex,\n columnIndex,\n message,\n /* isError */ true\n )\n}\n\nexport const editorHideMessage = async (editor) => {\n clearTimeout(state.timeout)\n state.timeout = -1\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'hideOverlayMessage'\n )\n return editor\n}\n", "// import * as EditorCompletion from '../EditorCompletion/EditorCompletion.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as ExtensionHostBraceCompletion from '../ExtensionHost/ExtensionHostBraceCompletion.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\nimport * as ExtensionHostTabCompletion from '../ExtensionHost/ExtensionHostTabCompletion.js'\nimport * as EditorShowMessage from './EditorCommandShowMessage.js'\n\nconst getErrorMessage = (error) => {\n return `${error}`\n}\n\nconst getMatchingClosingBrace = (brace) => {\n switch (brace) {\n case '{':\n return '}'\n case '(':\n return ')'\n case '[':\n return ']'\n default:\n return '???'\n }\n}\n\nexport const editorBraceCompletion = async (editor, text) => {\n try {\n const offset = TextDocument.offsetAt(editor, editor.cursor)\n const result =\n await ExtensionHostBraceCompletion.executeBraceCompletionProvider(\n editor,\n offset,\n text\n )\n if (result) {\n const closingBrace = getMatchingClosingBrace(text)\n const insertText = text + closingBrace\n const changes = editorReplaceSelections(\n editor,\n [insertText],\n 'editorType'\n )\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n }\n const changes = editorReplaceSelections(editor, [text], 'editorType')\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n } catch (error) {\n console.error(error)\n // TODO cursor should always be of type object\n const position = Array.isArray(editor.cursor)\n ? editor.cursor[0]\n : editor.cursor\n return EditorShowMessage.showErrorMessage(\n editor,\n position,\n getErrorMessage(error)\n )\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nexport const editorCancelSelection = (editor) => {\n const selections = editor.selections\n if (\n selections.length === 4 &&\n selections[0] === selections[2] &&\n selections[1] === selections[3]\n ) {\n return editor\n }\n const newSelections = EditorSelection.alloc(4)\n EditorSelection.moveRangeToPosition(\n newSelections,\n 0,\n selections[0],\n selections[1]\n )\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const editorHandleContextMenu = async (editor, x, y) => {\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'editor'\n )\n return editor\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as Assert from '../Assert/Assert.js'\n// TODO handle multiline selection\n// TODO handle multiple cursors\n\nexport const editorCopyLineDown = (editor) => {\n const selections = editor.selections\n const primarySelectionIndex = editor.primarySelectionIndex\n const rowIndex = selections[primarySelectionIndex]\n Assert.number(rowIndex)\n const position = {\n rowIndex,\n columnIndex: 0,\n }\n const changes = [\n {\n inserted: [TextDocument.getLine(editor, rowIndex), ''],\n deleted: [''],\n start: position,\n end: position,\n },\n ]\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\n\nexport const editorCopyLineUp = (editor) => {\n const rowIndex = editor.cursor.rowIndex\n const changes = [\n {\n start: editor.cursor,\n end: editor.cursor,\n inserted: [TextDocument.getLine(editor.textDocument, rowIndex), ''],\n deleted: [''],\n },\n ]\n Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "export const editorGetPositionLeft = (\n rowIndex,\n columnIndex,\n lines,\n getDelta\n) => {\n if (columnIndex === 0) {\n if (rowIndex === 0) {\n return { rowIndex: 0, columnIndex: 0 }\n }\n return {\n rowIndex: rowIndex - 1,\n columnIndex: lines[rowIndex - 1].length,\n }\n }\n const delta = getDelta(lines[rowIndex], columnIndex)\n return {\n rowIndex,\n columnIndex: columnIndex - delta,\n }\n}\n\nexport const moveToPositionEqual = (selections, i, rowIndex, columnIndex) => {\n selections[i] = rowIndex\n selections[i + 1] = columnIndex\n}\n\nexport const moveRangeToPosition = (selections, i, rowIndex, columnIndex) => {\n selections[i] = selections[i + 2] = rowIndex\n selections[i + 1] = selections[i + 3] = columnIndex\n}\n\nexport const moveToPositionLeft = (\n selections,\n i,\n rowIndex,\n columnIndex,\n lines,\n getDelta\n) => {\n if (columnIndex === 0) {\n if (rowIndex === 0) {\n selections[i] = 0\n selections[i + 1] = 0\n } else {\n selections[i] = rowIndex - 1\n selections[i + 1] = lines[rowIndex - 1].length\n }\n } else {\n const delta = getDelta(lines[rowIndex], columnIndex)\n selections[i] = rowIndex\n selections[i + 1] = columnIndex - delta\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorGetPositionLeft from './EditorCommandGetPositionLeft.js'\n\nconst getNewSelections = (selections, lines, getDelta) => {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n ) {\n if (selectionStartRow === 0 && selectionStartColumn === 0) {\n newSelections[i] = 0\n newSelections[i + 1] = 0\n newSelections[i + 2] = 0\n newSelections[i + 3] = 0\n } else {\n EditorGetPositionLeft.moveToPositionLeft(\n newSelections,\n i,\n selectionStartRow,\n selectionStartColumn,\n lines,\n getDelta\n )\n EditorGetPositionLeft.moveToPositionLeft(\n newSelections,\n i + 2,\n selectionStartRow,\n selectionStartColumn,\n lines,\n getDelta\n )\n }\n } else {\n EditorGetPositionLeft.moveRangeToPosition(\n newSelections,\n i,\n selections[i],\n selections[i + 1]\n )\n }\n }\n return newSelections\n}\n\nexport const editorCursorHorizontalLeft = (editor, getDelta) => {\n const lines = editor.lines\n const selections = editor.selections\n const newSelections = getNewSelections(selections, lines, getDelta)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "export const supported = () => {\n return 'Segmenter' in Intl\n}\n\nexport const create = () => {\n // @ts-ignore\n const segmenter = new Intl.Segmenter()\n return {\n at(line, index) {\n const segments = segmenter.segment(line)\n return segments.containing(index)\n },\n visualIndex(line, index) {\n const segments = segmenter.segment(line)\n let currentVisualIndex = 0\n for (const segment of segments) {\n if (segment.index >= index) {\n return currentVisualIndex\n }\n currentVisualIndex++\n }\n return currentVisualIndex\n },\n modelIndex(line, visualIndex) {\n const segments = segmenter.segment(line)\n let currentVisualIndex = 0\n for (const segment of segments) {\n if (currentVisualIndex >= visualIndex) {\n return segment.index\n }\n console.log({ segment })\n currentVisualIndex++\n }\n return line.length\n },\n }\n}\n", "import * as TextSegmenter from '../TextSegmenter/TextSegmenter.js'\n\nexport const characterLeft = (line, columnIndex) => {\n if (!TextSegmenter.supported()) {\n return 1\n }\n const segmenter = TextSegmenter.create()\n const last = segmenter.at(line, columnIndex - 1)\n return columnIndex - last.index\n}\n\nexport const characterRight = (line, columnIndex) => {\n if (!TextSegmenter.supported()) {\n return 1\n }\n const segmenter = TextSegmenter.create()\n const next = segmenter.at(line, columnIndex)\n return next.segment.length\n}\n\nconst isWhitespace = (char) => {\n return char === ' ' || char === '\\t'\n}\n\nexport const lineCharacterStart = (line, columnIndex) => {\n if (line.length === 0) {\n return 0\n }\n for (let i = 0; i < columnIndex; i++) {\n if (!isWhitespace(line[i])) {\n return columnIndex - i\n }\n }\n return columnIndex\n}\n\nexport const lineEnd = (line, columnIndex) => {\n return line.length - columnIndex\n}\n\nconst tryRegexArray = (partialLine, regexArray) => {\n for (const regex of regexArray) {\n const match = partialLine.match(regex)\n if (match) {\n return match[0].length\n }\n }\n return 1\n}\n\nconst RE_WORD_LEFT_1 = /(?<![A-Z])[A-Z]+\\s*$/\nconst RE_WORD_LEFT_2 = /[\\u00C0-\\u017F\\w\\-]+>?\\s*$/\nconst RE_WORD_LEFT_3 = /[a-zA-Z]+[^a-zA-Z\\d]+\\s*$/\nconst RE_WORD_LEFT_4 = /\\s+$/\nconst RE_WORD_LEFT_5 = /[^a-zA-Z\\d]+\\s*$/\nconst RE_WORD_LEFT = [\n RE_WORD_LEFT_1,\n RE_WORD_LEFT_2,\n RE_WORD_LEFT_3,\n RE_WORD_LEFT_4,\n RE_WORD_LEFT_5,\n]\n\nexport const wordLeft = (line, columnIndex) => {\n const partialLine = line.slice(0, columnIndex)\n return tryRegexArray(partialLine, RE_WORD_LEFT)\n}\n\nconst RE_WORD_RIGHT_1 = /^\\s*[\\u00C0-\\u017F\\w]+/i\nconst RE_WORD_RIGHT_2 = /^[^a-zA-Z\\d]+\\w*/\nconst RE_WORD_RIGHT = [RE_WORD_RIGHT_1, RE_WORD_RIGHT_2]\n\nexport const wordRight = (line, columnIndex) => {\n const partialLine = line.slice(columnIndex)\n return tryRegexArray(partialLine, RE_WORD_RIGHT)\n}\n\nconst RE_PARTIAL_WORD_LEFT_1 = /(?<![A-Z])[A-Z]{2}[a-z]+$/\nconst RE_PARTIAL_WORD_LEFT_2 = /(?=[A-Z]+)[A-Z][a-z]+$/\nconst RE_PARTIAL_WORD_LEFT_3 = /[A-Z]+[a-z]+\\d?\\s*$/\nconst RE_PARTIAL_WORD_LEFT_4 = /[A-Z]+\\d*\\s*$/\nconst RE_PARTIAL_WORD_LEFT_5 = /[a-z]+\\d*\\s*$/\nconst RE_PARTIAL_WORD_LEFT_6 = /[A-Z]*[a-z]+_+\\s*$/\nconst RE_PARTIAL_WORD_LEFT_7 = /(?<![A-Z])[A-Z]_+\\s*$/\nconst RE_PARTIAL_WORD_LEFT_8 = /[a-z]+\\s*$/\nconst RE_PARTIAL_WORD_LEFT_9 = /[^a-zA-Z\\d\\s]+\\s*$/\nconst RE_PARTIAL_WORD_LEFT = [\n RE_PARTIAL_WORD_LEFT_1,\n RE_PARTIAL_WORD_LEFT_2,\n RE_PARTIAL_WORD_LEFT_3,\n RE_PARTIAL_WORD_LEFT_4,\n RE_PARTIAL_WORD_LEFT_5,\n RE_PARTIAL_WORD_LEFT_6,\n RE_PARTIAL_WORD_LEFT_7,\n RE_PARTIAL_WORD_LEFT_8,\n RE_PARTIAL_WORD_LEFT_9,\n]\n\nexport const wordPartLeft = (line, columnIndex) => {\n const partialLine = line.slice(0, columnIndex)\n return tryRegexArray(partialLine, RE_PARTIAL_WORD_LEFT)\n}\n\nconst RE_PARTIAL_WORD_RIGHT_1 = /^\\s*[a-z]+\\d?/\nconst RE_PARTIAL_WORD_RIGHT_2 = /^\\s*[A-Z]{2}[a-z\\d]+/\nconst RE_PARTIAL_WORD_RIGHT_3 = /^\\s*[A-Z]+(?=[A-Z][a-z]+)/\nconst RE_PARTIAL_WORD_RIGHT_4 = /^\\s*[A-Z]+[a-z]*\\d*/\nconst RE_PARTIAL_WORD_RIGHT_5 = /^\\s*_+[a-z]*\\d?/\nconst RE_PARTIAL_WORD_RIGHT_6 = /^\\s*[^\\da-zA-Z\\s]+/\n// const RE_PARTIAL_WORD_RIGHT_6 = /^\\s*[A-Z][A-Z](?![A-Z])*/\n// const RE_PARTIAL_WORD_RIGHT_7 = /^\\s*[A-Z][A-Z][a-z]*/\n\nconst ARRAY_PARTIAL_WORD_RIGHT_1 = [\n RE_PARTIAL_WORD_RIGHT_1,\n // RE_PARTIAL_WORD_RIGHT_2,\n RE_PARTIAL_WORD_RIGHT_3,\n RE_PARTIAL_WORD_RIGHT_4,\n RE_PARTIAL_WORD_RIGHT_5,\n RE_PARTIAL_WORD_RIGHT_6,\n]\nconst ARRAY_PARTIAL_WORD_RIGHT_2 = [\n RE_PARTIAL_WORD_RIGHT_1,\n RE_PARTIAL_WORD_RIGHT_2,\n RE_PARTIAL_WORD_RIGHT_3,\n RE_PARTIAL_WORD_RIGHT_4,\n RE_PARTIAL_WORD_RIGHT_5,\n RE_PARTIAL_WORD_RIGHT_6,\n]\n\nconst RE_UPPERCASE = /[A-Z]/\n\nexport const wordPartRight = (line, columnIndex) => {\n const partialLine = line.slice(columnIndex)\n // line[columnIndex]//?\n if (RE_UPPERCASE.test(line[columnIndex - 1])) {\n return tryRegexArray(partialLine, ARRAY_PARTIAL_WORD_RIGHT_1)\n }\n return tryRegexArray(partialLine, ARRAY_PARTIAL_WORD_RIGHT_2)\n}\n\n// wordPartRight('\"command\": \"actions.find\"', 8) //?\n// 'DDa'.match(RE_PARTIAL_WORD_RIGHT_1) //?\n// wordPartRight('DDa', 0) //?\n// wordPartRight('DEBUGEntry', 3) //?\n\nexport const line = (line) => {}\n", "import * as EditorCursorHorizontalLeft from './EditorCommandCursorHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorCharacterLeft = (editor) => {\n return EditorCursorHorizontalLeft.editorCursorHorizontalLeft(\n editor,\n EditorDelta.characterLeft\n )\n}\n", "export const editorGetPositionRight = (position, lines, getDelta) => {\n const rowIndex = position.rowIndex\n const columnIndex = position.columnIndex\n if (columnIndex >= lines[rowIndex].length) {\n if (rowIndex >= lines.length) {\n return position\n }\n return {\n rowIndex: rowIndex + 1,\n columnIndex: 0,\n }\n }\n const delta = getDelta(lines[rowIndex], columnIndex)\n return {\n rowIndex,\n columnIndex: columnIndex + delta,\n }\n}\n\nexport const moveToPositionRight = (\n selections,\n i,\n rowIndex,\n columnIndex,\n lines,\n getDelta\n) => {\n const line = lines[rowIndex]\n if (columnIndex >= line.length) {\n selections[i] = selections[i + 2] = selections[i] + 1\n selections[i + 1] = selections[i + 3] = 0\n } else {\n const delta = getDelta(line, columnIndex)\n selections[i] = selections[i + 2] = rowIndex\n selections[i + 1] = selections[i + 3] = columnIndex + delta\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorGetPositionRight from './EditorCommandGetPositionRight.js'\n\nconst getNewSelections = (selections, lines, getDelta) => {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n ) {\n EditorGetPositionRight.moveToPositionRight(\n newSelections,\n i,\n selectionStartRow,\n selectionStartColumn,\n lines,\n getDelta\n )\n } else {\n newSelections[i] = newSelections[i + 2] = selections[i + 2]\n newSelections[i + 1] = newSelections[i + 3] = selections[i + 3]\n }\n }\n return newSelections\n}\n\nexport const editorCursorHorizontalRight = (editor, getDelta) => {\n const lines = editor.lines\n const selections = editor.selections\n const newSelections = getNewSelections(selections, lines, getDelta)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorCursorHorizontalRight from './EditorCommandCursorHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorCharacterRight = (editor) => {\n return EditorCursorHorizontalRight.editorCursorHorizontalRight(\n editor,\n EditorDelta.characterRight\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nconst moveSelectionDown = (\n selections,\n i,\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n) => {\n EditorSelection.moveRangeToPosition(\n selections,\n i,\n selectionEndRow + 1,\n selectionEndColumn\n )\n}\n\nconst getNewSelections = (selections) => {\n return EditorSelection.map(selections, moveSelectionDown)\n}\n\nexport const editorCursorDown = (editor) => {\n const selections = editor.selections\n const newSelections = getNewSelections(selections)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorCursorHorizontalRight from './EditorCommandCursorHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorEnd = (editor) => {\n return EditorCursorHorizontalRight.editorCursorHorizontalRight(\n editor,\n EditorDelta.lineEnd\n )\n}\n", "import * as EditorCursorHorizontalLeft from './EditorCommandCursorHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorsHome = (editor) => {\n return EditorCursorHorizontalLeft.editorCursorHorizontalLeft(\n editor,\n EditorDelta.lineCharacterStart\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nexport const editorCursorSet = (editor, rowIndex, columnIndex) => {\n Assert.object(editor)\n Assert.number(rowIndex)\n Assert.number(columnIndex)\n const selectionEdits = EditorSelection.fromRange(\n rowIndex,\n columnIndex,\n rowIndex,\n columnIndex\n )\n return Editor.scheduleSelections(editor, selectionEdits)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as TextSegmenter from '../TextSegmenter/TextSegmenter.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nconst editorCursorsVerticalWithIntlSegmenter = (\n editor,\n getPosition,\n getEdgePosition,\n delta\n) => {\n const edgePosition = getEdgePosition(editor)\n const moveSelection = (selection) => {\n const position = getPosition(selection)\n if (position.rowIndex === edgePosition.rowIndex) {\n return {\n start: edgePosition,\n end: edgePosition,\n }\n }\n\n const lineCurrent = TextDocument.getLine(editor, position.rowIndex)\n const lineOther = TextDocument.getLine(editor, position.rowIndex + delta)\n\n const segmenter = TextSegmenter.create()\n const lineCurrentVisualIndex = segmenter.visualIndex(\n lineCurrent,\n position.columnIndex\n )\n\n const lineOtherModelIndex = segmenter.modelIndex(\n lineOther,\n lineCurrentVisualIndex\n )\n\n const newPosition = {\n rowIndex: position.rowIndex + delta,\n columnIndex: lineOtherModelIndex,\n }\n return {\n start: newPosition,\n end: newPosition,\n }\n }\n const selectionEdits = editor.selections.map(moveSelection)\n return Editor.scheduleSelections(editor, selectionEdits)\n}\n\nconst moveSelectionWithoutIntlSegmenter = (\n selections,\n i,\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n) => {\n if (selectionStartRow === 0) {\n EditorSelection.moveRangeToPosition(selections, i, 0, 0)\n } else {\n EditorSelection.moveRangeToPosition(\n selections,\n i,\n selectionStartRow - 1,\n selectionStartColumn\n )\n }\n}\n\nconst getNewSelections = (selections) => {\n return EditorSelection.map(selections, moveSelectionWithoutIntlSegmenter)\n}\n\nexport const editorCommandCursorVertical = (\n editor,\n getPosition,\n getEdgePosition,\n delta\n) => {\n // if (TextSegmenter.supported()) {\n // return editorCursorsVerticalWithIntlSegmenter(\n // editor,\n // getPosition,\n // getEdgePosition,\n // delta\n // )\n // }\n const selections = editor.selections\n const newSelections = getNewSelections(selections, delta)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorCursorVertical from './EditorCommandCursorVertical.js'\n\nconst getEdgePosition = (editor) => {\n return {\n rowIndex: 0,\n columnIndex: 0,\n }\n}\n\nconst getPosition = (selection) => {\n return selection.start\n}\n\nexport const editorCursorsUp = (editor) => {\n return EditorCursorVertical.editorCommandCursorVertical(\n editor,\n getPosition,\n getEdgePosition,\n -1\n )\n}\n", "import * as EditorCursorHorizontalLeft from './EditorCommandCursorHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\n// TODO put all of these into editor -> also makes extracting editor into standalone npm package easier (no 20+ modules, just single ~10kB bundle)\n// also can share code between moveCursorWordRight moveCursoryWordLeft deleteCursorWordLeft\n\nexport const editorCursorWordLeft = (editor) => {\n return EditorCursorHorizontalLeft.editorCursorHorizontalLeft(\n editor,\n EditorDelta.wordLeft\n )\n}\n", "import * as EditorCursorHorizontalLeft from './EditorCommandCursorHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorWordPartLeft = (editor) => {\n return EditorCursorHorizontalLeft.editorCursorHorizontalLeft(\n editor,\n EditorDelta.wordPartLeft\n )\n}\n", "import * as EditorCursorHorizontalRight from './EditorCommandCursorHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorWordPartRight = (editor) => {\n return EditorCursorHorizontalRight.editorCursorHorizontalRight(\n editor,\n EditorDelta.wordPartRight\n )\n}\n", "import * as EditorCursorHorizontalRight from './EditorCommandCursorHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorCursorWordRight = (editor) => {\n return EditorCursorHorizontalRight.editorCursorHorizontalRight(\n editor,\n EditorDelta.wordRight\n )\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Editor from '../Editor/Editor.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\n\nexport const editorCut = async (editor) => {\n const selection = editor.selections[0]\n if (selection.start === selection.end) {\n // TODO cut line where cursor is\n } else {\n // cut selection\n }\n const changes = editorReplaceSelections(editor, [''], 'editorCut')\n const text = changes[0].deleted.join('\\n')\n // TODO remove selected text from document\n await Command.execute(\n /* ClipBoard.writeText */ 'ClipBoard.writeText',\n /* text */ text\n )\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\nimport * as EditorGetPositionLeft from './EditorCommandGetPositionLeft.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\n// TODO optimize this function by profiling and not allocating too many objects\nconst getChanges = (lines, selections, getDelta) => {\n const changes = []\n const deleteSelection = (\n selectionStartRow,\n selectionStartColumn,\n selectionEndRow,\n selectionEndColumn\n ) => {\n const positionLeft = EditorGetPositionLeft.editorGetPositionLeft(\n selectionStartRow,\n selectionStartColumn,\n lines,\n getDelta\n )\n const selectionEnd = {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n }\n changes.push({\n start: positionLeft,\n end: selectionEnd,\n inserted: [''],\n deleted: TextDocument.getSelectionText(\n { lines },\n {\n start: positionLeft,\n end: selectionEnd,\n }\n ),\n origin: 'delete',\n })\n }\n EditorSelection.forEach(selections, deleteSelection)\n return changes\n}\n\nexport const editorDeleteHorizontalLeft = (editor, getDelta) => {\n const lines = editor.lines\n const selections = editor.selections\n if (EditorSelection.isEverySelectionEmpty(selections)) {\n const changes = getChanges(lines, selections, getDelta)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n }\n const changes = editorReplaceSelections(editor, [''], 'delete')\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as EditorDeleteHorizontalLeft from './EditorCommandDeleteHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteAllLeft = (editor) => {\n return EditorDeleteHorizontalLeft.editorDeleteHorizontalLeft(\n editor,\n EditorDelta.lineCharacterStart\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorGetPositionRight from './EditorCommandGetPositionRight.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nconst getChanges = (editor, getDelta) => {\n const selections = editor.selections\n if (EditorSelection.isEverySelectionEmpty(selections)) {\n const changes = []\n const lines = editor.lines\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const start = {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn,\n }\n const positionRight = EditorGetPositionRight.editorGetPositionRight(\n start,\n lines,\n getDelta\n )\n changes.push({\n start: start,\n end: positionRight,\n inserted: [''],\n deleted: TextDocument.getSelectionText(editor, {\n start: start,\n end: positionRight,\n }),\n origin: 'deleteHorizontalRight',\n })\n }\n return changes\n }\n const changes = editorReplaceSelections(editor, [''], 'deleteHorizontalRight')\n return changes\n}\n\nexport const editorDeleteHorizontalRight = (editor, getDelta) => {\n const changes = getChanges(editor, getDelta)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as EditorDeleteHorizontalRight from './EditorCommandDeleteHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteAllRight = (editor) => {\n return EditorDeleteHorizontalRight.editorDeleteHorizontalRight(\n editor,\n EditorDelta.lineEnd\n )\n}\n", "import * as EditorDeleteHorizontalLeft from './EditorCommandDeleteHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteCharacterLeft = (editor) => {\n return EditorDeleteHorizontalLeft.editorDeleteHorizontalLeft(\n editor,\n EditorDelta.characterLeft\n )\n}\n", "import * as EditorDeleteHorizontalRight from './EditorCommandDeleteHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteCharacterRight = (editor) => {\n return EditorDeleteHorizontalRight.editorDeleteHorizontalRight(\n editor,\n EditorDelta.characterRight\n )\n}\n", "import * as EditorDeleteHorizontalLeft from './EditorCommandDeleteHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteWordLeft = (editor) => {\n return EditorDeleteHorizontalLeft.editorDeleteHorizontalLeft(\n editor,\n EditorDelta.wordLeft\n )\n}\n", "import * as EditorDeleteHorizontalLeft from './EditorCommandDeleteHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteWordPartLeft = (editor) => {\n EditorDeleteHorizontalLeft.editorDeleteHorizontalLeft(\n editor,\n EditorDelta.wordPartLeft\n )\n}\n", "import * as EditorDeleteHorizontalRight from './EditorCommandDeleteHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteWordPartRight = (editor) => {\n EditorDeleteHorizontalRight.editorDeleteHorizontalRight(\n editor,\n EditorDelta.wordPartRight\n )\n}\n", "import * as EditorDeleteHorizontalRight from './EditorCommandDeleteHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorDeleteWordRight = (editor) => {\n return EditorDeleteHorizontalRight.editorDeleteHorizontalRight(\n editor,\n EditorDelta.wordRight\n )\n}\n", "// based on https://github.com/bevacqua/fuzzysearch/blob/master/index.js\n\nexport const fuzzySearch = (needle, haystack) => {\n needle = needle.toLowerCase()\n haystack = haystack.toLowerCase()\n const hlen = haystack.length\n const nlen = needle.length\n if (nlen > hlen) {\n return false\n }\n if (nlen === hlen) {\n return needle === haystack\n }\n outer: for (let i = 0, j = 0; i < nlen; i++) {\n const nch = needle.charCodeAt(i)\n while (j < hlen) {\n if (haystack.charCodeAt(j++) === nch) {\n continue outer\n }\n }\n return false\n }\n return true\n}\n", "export { fuzzySearch } from './FuzzySearchMrAleph.js'\n", "import * as Assert from '../Assert/Assert.js'\nimport * as FuzzySearch from '../FuzzySearch/FuzzySearch.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as EditorBlur from './EditorCommandBlur.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\nimport * as ViewletState from '../ViewletStates/ViewletStates.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n\nconst handleBlur = () => {\n close()\n}\n\n/**\n *\n * @param {string} line\n * @param {number} columnIndex\n * @returns\n */\nconst getLeadingWord = (line, columnIndex) => {\n console.log({ line })\n Assert.string(line)\n Assert.number(columnIndex)\n for (let i = columnIndex - 1; i >= 0; i--) {\n if (!RE_CHARACTER.test(line[i])) {\n console.log({ i, columnIndex })\n return line.slice(i + 1, columnIndex)\n }\n }\n return line.slice(0, columnIndex)\n}\n\nconst filterCompletionItems = (completionItems, leadingWord) => {\n const filterCompletionItem = (completionItem) => {\n const labelMatch = FuzzySearch.fuzzySearch(\n leadingWord,\n completionItem.label\n )\n return labelMatch\n }\n console.log({ completionItems, leadingWord })\n const filtered = completionItems.filter(filterCompletionItem)\n return filtered\n}\n\nconst handleSelectionChange = (editor, selectionChanges) => {\n const selection = selectionChanges[0]\n const end = selection.end\n if (end.rowIndex !== state.rowIndex) {\n close()\n return\n }\n const line = editor.lines[end.rowIndex]\n const leadingWord = getLeadingWord(line, end.columnIndex)\n const oldStart = state.columnIndex - state.leadingWord.length\n const newStart = end.columnIndex - leadingWord.length\n if (oldStart !== newStart) {\n close()\n return\n }\n // TODO move completions widget and filter\n\n // TODO this doesn't work for variable width characters (unicode/emoji)\n\n const filteredCompletionItems = filterCompletionItems(\n state.completionItems,\n leadingWord\n )\n state.filteredCompletionItems = filteredCompletionItems\n state.leadingWord = leadingWord\n console.log({ leadingWord })\n const x = EditorPosition.x(editor, editor.cursor)\n const y = EditorPosition.y(editor, editor.cursor)\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorCompletion',\n /* method */ 'show',\n /* x */ x,\n /* y */ y,\n /* completionItems */ filteredCompletionItems,\n /* reason */ 1\n )\n}\n\nconst handleCursorChange = (anyEditor, cursorChange) => {\n console.log('cursor changed')\n}\n\n// TODO there are still race conditions in this function:\n// - when open is called twice, previous dom nodes can either be reused or the previous dom nodes must be disposed\n\nexport const open = async (editor, openingReason = 1) => {\n console.log('open editor completion')\n const viewlet = ViewletManager.create(\n ViewletModule.load,\n 'EditorCompletion',\n 'Widget',\n 'builtin://',\n 0,\n 0,\n 0,\n 0\n )\n\n await ViewletManager.load(viewlet)\n return editor\n\n // if (state.isOpened) {\n // // TODO filter\n // console.log('is already open')\n // return\n // }\n // const loadingDelay = Preferences.get('completions.loadingDelay')\n\n // console.log({ loadingDelay })\n // state.abortController.abort()\n // const abortController = new AbortController()\n // state.abortController = abortController\n // EditorBlur.registerListener(handleBlur) // TODO don't like side effect here\n\n // // TODO when editor is disposed, close completions\n\n // GlobalEventBus.addListener('editor.selectionChange', handleSelectionChange)\n // GlobalEventBus.addListener('editor.cursorChange', handleCursorChange)\n // state.isOpened = true\n // state.openingReason = openingReason\n // state.focusedIndex = 0\n // state.rowIndex = editor.cursor.rowIndex\n // state.columnIndex = editor.cursor.columnIndex\n // state.editor = editor\n // const line = editor.lines[editor.cursor.rowIndex]\n // state.leadingWord = getLeadingWord(line, editor.cursor.columnIndex)\n // // TODO race condition: when blur occurs before items arrive, should not show items\n // await RendererProcess.invoke(\n // /* Viewlet.load */ 3030,\n // /* id */ 'EditorCompletion'\n // )\n // if (abortController.signal.aborted) {\n // console.info('canceled')\n // return\n // }\n // await RendererProcess.invoke(\n // /* Viewlet.openWidget */ 3030,\n // /* id */ 'EditorCompletion'\n // )\n // if (abortController.signal.aborted) {\n // console.info('canceled')\n // return\n // }\n // state.loadingTimeout = setTimeout(showLoading, loadingDelay)\n // if (state.loadingTimeout !== -1) {\n // clearTimeout(state.loadingTimeout)\n // }\n // if (abortController.signal.aborted) {\n // console.info('canceled')\n // return\n // }\n // state.completionItems = newCompletionItems\n\n // const filteredCompletionItems = filterCompletionItems(\n // state.completionItems,\n // state.leadingWord\n // )\n // state.filteredCompletionItems = filteredCompletionItems\n\n // const x = EditorPosition.x(editor, editor.cursor)\n // const y = EditorPosition.y(editor, editor.cursor)\n // // TODO race condition: might already be dispose after each of these calls\n\n // if (newCompletionItems.length === 0 && state.openingReason === 0) {\n // return\n // }\n\n // await RendererProcess.invoke(\n // /* Viewlet.send */ 'Viewlet.send',\n // /* id */ 'EditorCompletion',\n // /* method */ 'show',\n // /* x */ x,\n // /* y */ y,\n // /* items */ filteredCompletionItems,\n // /* reason */ state.openingReason,\n // /* focusedIndex */ state.focusedIndex\n // )\n}\n\nexport const advance = (word) => {\n const includesWord = (completionItem) => {\n return completionItem.includes(word)\n }\n const filteredCompletions = state.completionItems.filter(includesWord)\n RendererProcess.invoke(\n /* EditorCompletion.open */ 836,\n /* items */ filteredCompletions,\n /* reason */ state.openingReason\n )\n}\n\n// export const onDidType = () => {}\n\n// TODO possible race condition\n// also should cancel when new open request comes in\n\nconst RE_CHARACTER = new RegExp(/^\\p{L}/, 'u')\n\nconst isCharacter = (text) => {\n return RE_CHARACTER.test(text)\n}\n\n// TODO trigger characters should be specific per language id\nconst isTriggerCharacter = (text) => {\n return text === '<' || text === '.'\n}\n\nexport const openFromType = async (editor, text) => {\n // if (isCharacter(text) || isTriggerCharacter(text)) {\n // await open(editor, 0)\n // } else if (state.isOpened) {\n // await close()\n // }\n return ViewletState.getState('EditorText')\n}\n\nexport const close = async (editor) => {\n EditorBlur.removeListener(handleBlur)\n GlobalEventBus.removeListener('editor.selectionChange', handleSelectionChange)\n GlobalEventBus.removeListener('editor.cursorChange', handleCursorChange)\n await Viewlet.dispose('EditorCompletion')\n return editor\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nexport const state = {\n isComposing: false,\n compositionText: '',\n}\n\nexport const editorCompositionStart = (editor, event) => {\n state.isComposing = true\n return editor\n}\n\nconst getCompositionChanges = (selections, data) => {\n const changes = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const startColumnIndex = selectionStartColumn - state.compositionText.length\n changes.push({\n start: {\n rowIndex: selectionStartRow,\n columnIndex: startColumnIndex,\n },\n end: {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n },\n inserted: [data],\n deleted: [state.compositionText],\n origin: 'compositionUpdate',\n })\n }\n return changes\n}\n\nexport const editorCompositionUpdate = (editor, data) => {\n const selections = editor.selections\n const changes = getCompositionChanges(selections, data)\n console.log('composition update', changes)\n state.compositionText = data\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n\nexport const editorCompositionEnd = (editor, data) => {\n const selections = editor.selections\n const changes = getCompositionChanges(selections, data)\n console.log('composition end', { changes })\n state.isComposing = false\n state.compositionText = ''\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\n\n// TODO add test\nexport const editorCopy = async (editor) => {\n if (!Editor.hasSelection(editor)) {\n // TODO copy line where cursor is\n return editor\n }\n const selectionStartRowIndex = editor.selections[0]\n const selectionStartColumnIndex = editor.selections[1]\n const selectionEndRowIndex = editor.selections[2]\n const selectionEndColumnIndex = editor.selections[3]\n const range = {\n start: {\n rowIndex: selectionStartRowIndex,\n columnIndex: selectionStartColumnIndex,\n },\n end: {\n rowIndex: selectionEndRowIndex,\n columnIndex: selectionEndColumnIndex,\n },\n }\n const text = TextDocument.getSelectionText(editor, range).join('\\n')\n await Command.execute(\n /* ClipBoard.writeText */ 'ClipBoard.writeText',\n /* text */ text\n )\n return editor\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\nexport const editorFormat = async (editor) => {\n // Editor.sync(editor)\n // console.log(textDocument)\n // TODO only transfer incremental edits from shared process\n // TODO also format with cursor\n const newContent = await SharedProcess.invoke(\n /* ExtensionHost.format */ 'ExtensionHost.format',\n /* textDocumentId */ editor.textDocument.id\n )\n if (typeof newContent !== 'string') {\n console.warn('something is wrong with format on save', newContent)\n return\n }\n console.log({ newContent })\n // TODO use incremental edit\n const documentEdits = [\n {\n type: /* replace */ 3,\n text: newContent,\n },\n ]\n Editor.scheduleDocumentAndCursorsSelections(editor, documentEdits)\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeDefinitionProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onDefinition:${editor.languageId}`,\n method: 'ExtensionHostDefinition.executeDefinitionProvider',\n params: [editor.id, offset],\n noProviderFoundMessage: 'no definition provider found',\n combineResults,\n })\n}\n", "const RE_WORD_START = /^\\w+/\n\nconst RE_WORD_END = /\\w+$/\n\nexport const getWordAt = (editor, rowIndex, columnIndex) => {\n const line = editor.lines[rowIndex]\n const before = line.slice(0, columnIndex)\n const matchBefore = before.match(RE_WORD_END)\n const after = line.slice(columnIndex)\n const matchAfter = after.match(RE_WORD_START)\n let word = ''\n if (matchBefore) {\n word += matchBefore[0]\n }\n if (matchAfter) {\n word += matchAfter[0]\n }\n return {\n word,\n }\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorShowMessage from './EditorCommandShowMessage.js'\nimport * as EditorGetWordAt from './EditorCommandGetWordAt.js'\n\nexport const goTo = async ({\n editor,\n getLocation,\n getNoLocationFoundMessage,\n getErrorMessage,\n isNoProviderFoundError,\n}) => {\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n try {\n const definition = await getLocation(editor, rowIndex, columnIndex)\n // TODO if editor is already disposed at this point, do nothing\n if (!definition) {\n // TODO show popup that no definition was found\n // TODO if there was an error, show popup that go to definition resulted in an error\n const info = EditorGetWordAt.getWordAt(editor, rowIndex, columnIndex)\n const message = getNoLocationFoundMessage(info)\n return EditorShowMessage.editorShowMessage(\n editor,\n rowIndex,\n columnIndex,\n message,\n false\n )\n }\n if (\n typeof definition.uri !== 'string' ||\n typeof definition.startOffset !== 'number' ||\n typeof definition.endOffset !== 'number'\n ) {\n console.warn('invalid definition result', definition)\n return editor\n }\n\n if (definition.uri === editor.uri) {\n // TODO set cursor to the definition position\n const position = TextDocument.positionAt(editor, definition.startOffset)\n const selectionEdits = [\n {\n start: position,\n end: position,\n },\n ]\n return Editor.scheduleSelections(editor, selectionEdits)\n }\n // TODO if definition.file is not of type string, show a popup that definition.file must be of type string\n // TODO open file and scroll to that position and set cursor to that position\n\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ definition.file\n )\n return editor\n } catch (error) {\n // TODO if editor is already disposed at this point, do nothing\n if (isNoProviderFoundError(error)) {\n const displayErrorMessage = getErrorMessage(error)\n await EditorShowMessage.editorShowMessage(\n editor,\n rowIndex,\n columnIndex,\n displayErrorMessage,\n false\n )\n return editor\n }\n console.error(error)\n const displayErrorMessage = getErrorMessage(error)\n await EditorShowMessage.editorShowMessage(\n editor,\n rowIndex,\n columnIndex,\n displayErrorMessage,\n true\n )\n return editor\n }\n}\n", "import * as ExtensionHostDefinition from '../ExtensionHost/ExtensionHostDefinition.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorGoTo from './EditorCommandGoTo.js'\n\nconst UiStrings = {\n NoDefinitionFound: 'No definition found',\n NoDefinitionFoundFor: `No definition found for '{PH1}'`,\n}\n\n// TODO race condition, check that editor hasn't been closed in the meantime\n\n// TODO in case of error should show message \"Definition Error: Cannot ready Property x of undefined\"\n\n// TODO show some kind of message maybe (\"No Definition found\")\n\n// TODO possible to do this with events/state machine instead of promises -> enables canceling operations / concurrent calls\n\n// TODO there are still race conditions in this function:\n// - when open is called twice, previous dom nodes can either be reused or the previous dom nodes must be disposed\n\nconst getLocation = async (editor, rowIndex, columnIndex) => {\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const definition = await ExtensionHostDefinition.executeDefinitionProvider(\n editor,\n offset\n )\n return definition\n}\n\nconst getNoLocationFoundMessage = (info) => {\n if (info.word) {\n return I18nString.i18nString(UiStrings.NoDefinitionFoundFor, {\n PH1: info.word,\n })\n }\n return I18nString.i18nString(UiStrings.NoDefinitionFound)\n}\n\nconst getErrorMessage = (error) => {\n // if (\n // error &&\n // error.message &&\n // error.message.startsWith('Failed to execute definition provider: ')\n // ) {\n // return error.message.replace('Failed to execute definition provider: ', '')\n // }\n return `${error}`\n}\n\nconst isNoProviderFoundError = (error) => {\n return (\n error &&\n // @ts-ignore\n error.message &&\n // @ts-ignore\n error.message.startsWith(\n 'Failed to execute definition provider: No definition provider found'\n )\n )\n}\n\nexport const editorGoToDefinition = (editor) => {\n return EditorGoTo.goTo({\n editor,\n getLocation,\n getNoLocationFoundMessage,\n getErrorMessage,\n isNoProviderFoundError,\n })\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeTypeDefinitionProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onTypeDefinition:${editor.languageId}`,\n method: 'ExtensionHostTypeDefinition.executeTypeDefinitionProvider',\n params: [editor.id, offset],\n noProviderFoundMessage: 'No type definition provider found',\n noProviderFoundResult: undefined,\n combineResults,\n })\n}\n", "import * as ExtensionHostTypeDefinition from '../ExtensionHost/ExtensionHostTypeDefinition.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorGoTo from './EditorCommandGoTo.js'\n\n// TODO duplicate code with editorCommandGoToDefinition\n// TODO race condition, check that editor hasn't been closed in the meantime\n\n// TODO in case of error should show message \"Definition Error: Cannot ready Property x of undefined\"\n\n// TODO show some kind of message maybe (\"No Definition found\")\n\n// TODO possible to do this with events/state machine instead of promises -> enables canceling operations / concurrent calls\n\n// TODO there are still race conditions in this function:\n// - when open is called twice, previous dom nodes can either be reused or the previous dom nodes must be disposed\n\nconst UiStrings = {\n NoTypeDefinitionFound: 'No type definition found',\n NoTypeDefinitionFoundFor: `No type definition found for '{PH1}'`,\n}\n\nconst getTypeDefinitionErrorMessage = (error) => {\n return `${error}`\n}\n\nconst getLocation = async (editor, rowIndex, columnIndex) => {\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const definition =\n await ExtensionHostTypeDefinition.executeTypeDefinitionProvider(\n editor,\n offset\n )\n return definition\n}\n\nconst getNoLocationFoundMessage = (info) => {\n if (info.word) {\n return I18nString.i18nString(UiStrings.NoTypeDefinitionFoundFor, {\n PH1: info.word,\n })\n }\n return I18nString.i18nString(UiStrings.NoTypeDefinitionFound)\n}\n\nconst getErrorMessage = (error) => {\n // if (\n // error &&\n // error.message &&\n // error.message.startsWith('Failed to execute type definition provider: ')\n // ) {\n // return error.message.replace(\n // 'Failed to execute type definition provider: ',\n // ''\n // )\n // }\n return `${error}`\n}\n\nconst isNoProviderFoundError = (error) => {\n return (\n error &&\n // @ts-ignore\n error.message &&\n // @ts-ignore\n error.message.startsWith(\n 'Failed to execute type definition provider: No type definition provider found'\n )\n )\n}\n\nexport const editorGoToTypeDefinition = (editor, explicit = true) => {\n return EditorGoTo.goTo({\n editor,\n getLocation,\n getNoLocationFoundMessage,\n isNoProviderFoundError,\n getErrorMessage,\n })\n}\n", "// TODO adjust relative position\nexport const getSelectionFromNativeRange = (editor, range) => {\n return new Uint32Array([\n range.startRowIndex,\n range.startColumnIndex,\n range.endRowIndex,\n range.endColumnIndex,\n ])\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorGetSelectionFromNativeRange from './EditorCommandGetSelectionFromNativeRange.js'\n\nconst getChanges = (editor, data, range) => {\n const selection =\n EditorGetSelectionFromNativeRange.getSelectionFromNativeRange(editor, range)\n const selectionRange = {\n start: {\n rowIndex: selection[0],\n columnIndex: selection[1],\n },\n end: {\n rowIndex: selection[2],\n columnIndex: selection[3],\n },\n }\n const changes = [\n {\n start: selectionRange.start,\n end: selectionRange.end,\n inserted: [data],\n deleted: TextDocument.getSelectionText(editor, selectionRange),\n origin: 'contentEditableInput',\n },\n ]\n return changes\n}\n\nexport const handleBeforeInputFromContentEditable = (editor, data, range) => {\n const changes = getChanges(editor, data, range)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\n// match all words, including umlauts, see https://stackoverflow.com/questions/5436824/matching-accented-characters-with-javascript-regexes/#answer-11550799\nconst RE_WORD_START = /^[a-z\\u00C0-\\u017F\\d]+/i\nconst RE_WORD_END = /[a-z\\u00C0-\\u017F\\d]+$/i\n\nconst getNewSelections = (line, rowIndex, columnIndex) => {\n const before = line.slice(0, columnIndex)\n const after = line.slice(columnIndex)\n const beforeMatch = before.match(RE_WORD_END)\n const afterMatch = after.match(RE_WORD_START)\n const columnStart = columnIndex - (beforeMatch ? beforeMatch[0].length : 0)\n const columnEnd = columnIndex + (afterMatch ? afterMatch[0].length : 0)\n const newSelections = new Uint32Array([\n rowIndex,\n columnStart,\n rowIndex,\n columnEnd,\n ])\n return newSelections\n}\n\nexport const editorSelectWord = (editor, rowIndex, columnIndex) => {\n const line = TextDocument.getLine(editor, rowIndex)\n const newSelections = getNewSelections(line, rowIndex, columnIndex)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorSelectWord from './EditorCommandSelectWord.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nexport const editorHandleDoubleClick = (editor, x, y, offset) => {\n const position = EditorPosition.at(editor, x, y, offset)\n return EditorSelectWord.editorSelectWord(\n editor,\n position.rowIndex,\n position.columnIndex\n )\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeHoverProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onHover:${editor.languageId}`,\n method: 'ExtensionHostHover.execute',\n params: [editor.id, offset],\n noProviderFoundMessage: 'No hover provider found',\n combineResults,\n })\n}\n", "import * as ExtensionHostHover from '../ExtensionHost/ExtensionHostHover.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nconst getHover = async (editor, rowIndex, columnIndex) => {\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const hover = await ExtensionHostHover.executeHoverProvider(editor, offset)\n return hover\n}\n\nconst showHover = async (editor, position) => {\n const hover = await getHover(editor, position.rowIndex, position.columnIndex)\n if (!hover) {\n console.log('no hover')\n return\n }\n\n RendererProcess.invoke(\n /* EditorHover.show */ 6216,\n /* x */ editor.left + position.columnIndex * editor.columnWidth,\n /* y */ editor.top + position.rowIndex * editor.rowHeight,\n /* hover */ hover\n )\n console.log({ hover })\n}\n\nexport const editorHandleMouseMove = (editor, x, y) => {\n const position = EditorPosition.at(editor, x, y)\n // console.log(position)\n // showHover(editor, position)\n return editor\n}\n", "import * as EditorPosition from './EditorCommandPosition.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as ExtensionHostDefinition from '../ExtensionHost/ExtensionHostDefinition.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nconst getTokenIndex = (tokens, offset) => {\n let currentOffset = 0\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]\n currentOffset += token.length\n if (currentOffset >= offset) {\n return i\n }\n }\n return -1\n}\n\nexport const editorHandleMouseMoveWithAltKey = async (editor, x, y, offset) => {\n Assert.object(editor)\n Assert.number(x)\n Assert.number(y)\n Assert.number(offset)\n const position = EditorPosition.at(editor, x, y, offset)\n const documentOffset = TextDocument.offsetAt(\n editor,\n position.rowIndex,\n position.columnIndex\n )\n try {\n const definition = await ExtensionHostDefinition.executeDefinitionProvider(\n editor,\n documentOffset\n )\n if (!definition) {\n return editor\n }\n\n // TODO make sure that editor is not disposed\n\n const definitionStartPosition = TextDocument.positionAt(\n editor,\n definition.startOffset\n )\n const definitionEndPosition = TextDocument.positionAt(\n editor,\n definition.endOffset\n )\n const definitionRelativeStartX = definitionStartPosition.columnIndex\n const definitionRelativeEndX = definitionEndPosition.columnIndex\n const definitionRelativeY =\n definitionStartPosition.rowIndex - editor.minLineY\n\n const lineTokenMap = editor.lineCache[definitionStartPosition.rowIndex + 1]\n console.log({ tokenMap: lineTokenMap })\n console.log({\n lineCache: editor.lineCache,\n rowIndex: definitionStartPosition.rowIndex,\n })\n if (!lineTokenMap) {\n return editor\n }\n const tokenIndex = getTokenIndex(\n lineTokenMap.tokens,\n definitionStartPosition.columnIndex\n )\n if (tokenIndex === -1) {\n return editor\n }\n console.log({ token: tokenIndex })\n // .tokens\n // console.log({ editor })\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'EditorText',\n /* method */ 'highlightAsLink',\n /* relativeY */ definitionRelativeY,\n /* tokenIndex */ tokenIndex\n )\n console.log({ definition })\n return editor\n } catch (error) {\n if (\n error &&\n error.message.startsWith(\n 'Failed to execute definition provider: No definition provider found'\n )\n ) {\n return editor\n }\n throw error\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorGetSelectionFromNativeRange from './EditorCommandGetSelectionFromNativeRange.js'\n\nexport const editorHandleNativeSelectionChange = (editor, range) => {\n const selections =\n EditorGetSelectionFromNativeRange.getSelectionFromNativeRange(editor, range)\n return Editor.scheduleSelections(editor, selections)\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nexport const state = {\n /**\n * Offset at which scrollbar thumb has been clicked\n */\n handleOffset: 0,\n}\n\n// TODO scrollbar position can be in interval [0, editor.height - editor.scrollBarHeight]\n// when clicked at y <= editor.scrollbarHeight/2, position is set to zero\n// when clicked at y >= editor.height - editor.scrollBarHeight/2, position is set to (editor.height - scrollBarHeight/2)\n// when clicked at y > editor.height - editor.scrollBarHeight/2, position scrollbar at (y - scrollbarHeight/2)\n// additionally, when clicked on scrollbar, scrollbar position shouldn't move\n\nconst getNewDeltaPercent = (editor, relativeY) => {\n if (relativeY <= editor.scrollBarHeight / 2) {\n // clicked at top\n return 0\n }\n if (relativeY <= editor.height - editor.scrollBarHeight / 2) {\n // clicked in middle\n return (\n (relativeY - editor.scrollBarHeight / 2) /\n (editor.height - editor.scrollBarHeight)\n )\n }\n // clicked at bottom\n return 1\n}\n\nexport const editorHandleScrollBarClick = (editor, y) => {\n const relativeY = y - editor.top\n const currentScrollBarY =\n (editor.deltaY / editor.finalDeltaY) *\n (editor.height - editor.scrollBarHeight)\n console.log({ scrollBarY: currentScrollBarY, relativeY })\n const diff = relativeY - currentScrollBarY\n console.log({ diff })\n if (diff >= 0 && diff < editor.scrollBarHeight) {\n state.handleOffset = diff\n console.log({ handleOffset: diff })\n return editor\n }\n const newPercent = getNewDeltaPercent(editor, relativeY)\n console.log({ newPercent })\n // TODO\n state.handleOffset = editor.scrollBarHeight / 2\n // TODO when diff is greater, position scrollbar in the middle around cursor\n const newDeltaY = newPercent * editor.finalDeltaY\n return Editor.setDeltaYFixedValue(editor, newDeltaY)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorHandleScrollBarClick from './EditorCommandHandleScrollBarClick.js'\n\nconst getNewPercent = (editor, relativeY) => {\n console.log({ editor, relativeY })\n // if (relativeY <= editor.scrollBarHeight / 2) {\n // console.log('clicked at top')\n // // clicked at top\n // return 0\n // }\n if (relativeY <= editor.height - editor.scrollBarHeight / 2) {\n // clicked in middle\n return relativeY / (editor.height - editor.scrollBarHeight)\n }\n // clicked at bottom\n return 1\n}\n\nexport const editorHandleScrollBarMove = (editor, y) => {\n const relativeY =\n y - editor.top - EditorHandleScrollBarClick.state.handleOffset\n console.log('handle offset', EditorHandleScrollBarClick.state.handleOffset)\n const newPercent = getNewPercent(editor, relativeY)\n const newDeltaY = newPercent * editor.finalDeltaY\n return Editor.setDeltaYFixedValue(editor, newDeltaY)\n}\n", "export const Ctrl = 'ctrl'\n\nexport const Alt = 'alt'\n\nexport const None = ''\n", "import * as Editor from '../Editor/Editor.js'\n\n// TODO not sure where this state should be\n// TODO maybe rename to selection anchor\nexport const state = {\n position: {\n rowIndex: 0,\n columnIndex: 0,\n },\n}\n\nconst compare = (positionA, positionB) => {\n if (positionA.rowIndex > positionB.rowIndex) {\n return 1\n }\n if (positionA.rowIndex === positionB.rowIndex) {\n if (positionA.columnIndex > positionB.columnIndex) {\n return 1\n }\n if (positionA.columnIndex < positionB.columnIndex) {\n return -1\n }\n return 0\n }\n return -1\n}\n\nconst editorMoveSelectionBackwards = (anchor, position) => {\n return new Uint32Array([\n position.rowIndex,\n position.columnIndex,\n anchor.rowIndex,\n anchor.columnIndex,\n ])\n}\n\nconst editorMoveSelectionEqual = (anchor, position) => {\n return new Uint32Array([\n position.rowIndex,\n position.columnIndex,\n position.rowIndex,\n position.columnIndex,\n ])\n}\n\nconst editorMoveSelectionForwards = (anchor, position) => {\n return new Uint32Array([\n anchor.rowIndex,\n anchor.columnIndex,\n position.rowIndex,\n position.columnIndex,\n ])\n}\n\nconst getNewSelections = (anchor, position) => {\n switch (compare(position, anchor)) {\n case -1:\n return editorMoveSelectionBackwards(anchor, position)\n case 0:\n return editorMoveSelectionEqual(anchor, position)\n case 1:\n return editorMoveSelectionForwards(anchor, position)\n default:\n throw new Error('unexpected comparison result')\n }\n}\n\nexport const editorMoveSelection = (editor, position) => {\n const anchor = state.position\n const newSelections = getNewSelections(anchor, position)\n // TODO if selection equals previous selection -> do nothing\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as ModifierKey from '../ModifierKey/ModifierKey.js'\nimport * as EditorGoToDefinition from './EditorCommandGoToDefinition.js'\nimport * as EditorMoveSelection from './EditorCommandMoveSelection.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nconst handleSingleClickWithAlt = async (editor, position) => {\n // TODO rectangular selection with alt click,\n // but also go to definition with alt click\n console.log('alt key pressed')\n const newEditor = await EditorGoToDefinition.editorGoToDefinition(\n editor,\n position,\n /* explicit */ false\n )\n return newEditor\n}\n\nconst handleSingleClickWithCtrl = async (editor, position) => {\n const selections = editor.selections\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n selectionStartRow === position.rowIndex &&\n selectionStartColumn === position.columnIndex &&\n selectionEndRow === position.rowIndex &&\n selectionEndColumn === position.columnIndex\n ) {\n // selection exists -> remove\n const newSelections = new Uint32Array(selections.length - 4)\n newSelections.set(selections.subarray(0, i), 0)\n newSelections.set(selections.subarray(i + 4), i)\n return Editor.scheduleSelections(editor, newSelections)\n }\n }\n // TODO selection does not exist -> add\n // TODO insert in order\n const newSelections = new Uint32Array(selections.length + 4)\n newSelections.set(selections, 0)\n const insertIndex = selections.length\n newSelections[insertIndex] = position.rowIndex\n newSelections[insertIndex + 1] = position.columnIndex\n newSelections[insertIndex + 2] = position.rowIndex\n newSelections[insertIndex + 3] = position.columnIndex\n return Editor.scheduleSelections(editor, newSelections)\n}\n\nconst handleSingleClickDefault = (editor, position) => {\n EditorMoveSelection.state.position = position\n return {\n ...editor,\n selections: new Uint32Array([\n position.rowIndex,\n position.columnIndex,\n position.rowIndex,\n position.columnIndex,\n ]),\n focused: true,\n }\n}\n\nexport const editorHandleSingleClick = (editor, modifier, x, y, offset) => {\n Assert.object(editor)\n Assert.string(modifier)\n Assert.number(x)\n Assert.number(y)\n Assert.number(offset)\n const position = EditorPosition.at(editor, x, y, offset)\n switch (modifier) {\n case ModifierKey.Alt:\n return handleSingleClickWithAlt(editor, position)\n case ModifierKey.Ctrl:\n return handleSingleClickWithCtrl(editor, position)\n default:\n return handleSingleClickDefault(editor, position)\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\nconst getChanges = (lines, selections, snippet) => {\n // TODO verify that deleted fits in the line\n const insertedLines = snippet.inserted.split('\\n')\n const changes = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (insertedLines.length > 1) {\n const line = TextDocument.getLine({ lines }, selectionStartRow)\n const indent = TextDocument.getIndent(line)\n const insertedLinesHere = [\n insertedLines[0],\n ...insertedLines.slice(1).map((line) => indent + line),\n ]\n changes.push({\n start: {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn - snippet.deleted,\n },\n end: {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n },\n inserted: insertedLinesHere,\n deleted: [''],\n origin: 'editorSnippet',\n })\n } else {\n changes.push({\n start: {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn - snippet.deleted,\n },\n end: {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n },\n inserted: insertedLines,\n deleted: [''],\n origin: 'editorSnippet',\n })\n }\n }\n return changes\n}\n\n// const getIndent =\n// TODO rename to insertSnippet\n// TODO handle snippet tabstops and cursors $0 -> becomes cursor\nexport const editorSnippet = (editor, snippet) => {\n // TODO verify that deleted fits in the line\n const lines = editor.lines\n const selections = editor.selections\n const changes = getChanges(lines, selections, snippet)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as ExtensionHostTabCompletion from '../ExtensionHost/ExtensionHostTabCompletion.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorShowMessage from './EditorCommandShowMessage.js'\nimport * as EditorSnippet from './EditorCommandSnippet.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\n\nconst getTabCompletion = async (editor) => {\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const tabCompletion =\n await ExtensionHostTabCompletion.executeTabCompletionProvider(\n editor,\n offset\n )\n return tabCompletion\n}\n\nconst getErrorMessage = (error) => {\n return `${error}`\n}\n\nexport const editorTabCompletion = async (editor) => {\n try {\n // TODO race condition\n // TODO get tab completion for each cursor\n const tabCompletion = await getTabCompletion(editor)\n if (!tabCompletion) {\n console.log({ tabCompletion })\n return editor\n }\n return EditorSnippet.editorSnippet(editor, tabCompletion)\n } catch (error) {\n ErrorHandling.printError(error)\n // TODO cursor should always be of type object\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n return EditorShowMessage.showErrorMessage(\n editor,\n rowIndex,\n columnIndex,\n getErrorMessage(error)\n )\n }\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeClosingTagProvider = (\n textDocument,\n offset,\n openingBrace\n) => {\n return ExtensionHostShared.executeProviders({\n event: `onClosingTag:${textDocument.languageId}`,\n method: 'ExtensionHostClosingTag.executeClosingTagProvider',\n params: [textDocument.id, offset, openingBrace],\n combineResults,\n })\n}\n", "// import * as EditorCompletion from '../EditorCompletion/EditorCompletion.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as ExtensionHostBraceCompletion from '../ExtensionHost/ExtensionHostBraceCompletion.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as ExtensionHostClosingTag from '../ExtensionHost/ExtensionHostClosingTagCompletion.js'\nimport * as EditorCommandCompletion from './EditorCommandCompletion.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\n\nconst RE_CHARACTER = new RegExp(/^\\p{L}/, 'u')\n\nexport const state = {\n listeners: [],\n}\n\nconst getMatchingClosingBrace = (brace) => {\n switch (brace) {\n case '{':\n return '}'\n case '(':\n return ')'\n case '[':\n return ']'\n default:\n return '???'\n }\n}\n\nconst isBrace = (text) => {\n if (text.length !== 1) {\n return false\n }\n switch (text) {\n case '{':\n case '(':\n case '[':\n return true\n default:\n return false\n }\n}\n\nconst isSlash = (text) => {\n return text === '/'\n}\n\nconst editorTypeWithBraceCompletion = async (editor, text) => {\n const offset = TextDocument.offsetAt(editor, editor.cursor)\n const result =\n await ExtensionHostBraceCompletion.executeBraceCompletionProvider(\n editor,\n offset,\n text\n )\n console.log({ result })\n if (result) {\n const closingBrace = getMatchingClosingBrace(text)\n const insertText = text + closingBrace\n const changes = editorReplaceSelections(editor, [insertText], 'editorType')\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n }\n const changes = editorReplaceSelections(editor, [text], 'editorType')\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n\nconst editorTypeWithSlashCompletion = async (editor, text) => {\n const offset = TextDocument.offsetAt(editor, editor.cursor)\n const result = await ExtensionHostClosingTag.executeClosingTagProvider(\n editor,\n offset,\n text\n )\n const changes = editorReplaceSelections(editor, [text], 'editorType')\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n\n// TODO implement typing command without brace completion -> brace completion should be independent module\nexport const editorType = async (editor, text) => {\n // if (isBrace(text)) {\n // console.log('is brace')\n // return editorTypeWithBraceCompletion(editor, text)\n // }\n // if (isSlash(text)) {\n // return editorTypeWithSlashCompletion(editor, text)\n // }\n const changes = editorReplaceSelections(editor, [text], 'editorType')\n // // TODO trigger characters should be monomorph -> then skip this check\n // if (\n // editor.completionTriggerCharacters &&\n // editor.completionTriggerCharacters.includes(text)\n // ) {\n // Command.execute(/* EditorCompletion.openFromType */ 988)\n // }\n\n // TODO should editor type command know about editor completion? -> no\n // EditorCommandCompletion.openFromType(editor, text)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n\nexport const onDidType = (listener) => {\n state.listeners.push(listener)\n // TODO unregister\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getChanges = (selections) => {\n const rowsToIndent = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionEndRow = selections[i + 2]\n for (let i = selectionStartRow; i <= selectionEndRow; i++) {\n rowsToIndent.push(i)\n }\n }\n const changes = []\n for (const rowToIndent of rowsToIndent) {\n changes.push({\n start: {\n rowIndex: rowToIndent,\n columnIndex: 0,\n },\n end: {\n rowIndex: rowToIndent,\n columnIndex: 0,\n },\n inserted: [' '],\n deleted: [''],\n origin: 'indentMore',\n })\n }\n return changes\n}\n\nexport const editorIndentMore = (editor) => {\n const selections = editor.selections\n const changes = getChanges(selections)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as EditorTabCompletion from './EditorCommandTabCompletion.js'\nimport * as EditorType from './EditorCommandType.js'\nimport * as EditorIndent from './EditorCommandIndentMore.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\n// TODO tab doesn't work well with configurable keybindings\nexport const editorHandleTab = async (editor) => {\n if (EditorSelection.isEverySelectionEmpty(editor.selections)) {\n console.log('call tab completion')\n const applied = await EditorTabCompletion.editorTabCompletion(editor)\n if (applied !== editor) {\n return applied\n }\n // TODO have setting what should be inserted on tab\n return EditorType.editorType(editor, ' ')\n }\n return EditorIndent.editorIndentMore(editor)\n}\n\n// const editor = {\n// textDocument: {\n// lines: ['line 1', 'line 2', 'line 3', 'line 4'],\n// },\n// cursor: {\n// rowIndex: 0,\n// columnIndex: 1,\n// },\n// selections: [\n// {\n// start: {\n// rowIndex: 1,\n// columnIndex: 1,\n// },\n// end: {\n// rowIndex: 2,\n// columnIndex: 2,\n// },\n// },\n// ],\n// }\n// const main = async () => {\n// await editorHandleTab(editor)\n// editor.lines //?\n// }\n\n// main()\n", "export const state = {\n touchOffsetY: 0,\n deltaY: 0,\n}\n\nexport const editorHandleTouchStart = (editor, touchEvent) => {\n if (touchEvent.touches.length === 0) {\n return\n }\n console.log('touch start')\n const firstTouch = touchEvent.touches[0]\n state.touchOffsetY = firstTouch.y\n state.deltaY = editor.deltaY\n // const position = EditorPosition.at(editor, firstTouch.x, firstTouch.y)\n // EditorMoveSelection.state.position = position\n // state.date = Date.now()\n}\n", "import * as EditorPosition from './EditorCommandPosition.js'\nimport * as EditorHandleTouchStart from './EditorCommandHandleTouchStart.js'\nimport * as EditorSelectWord from './EditorCommandSelectWord.js'\nimport * as EditorCursorSet from './EditorCommandCursorSet.js'\nimport * as EditorMoveSelection from './EditorCommandMoveSelection.js'\n\nconst LONG_TOUCH_THRESHOLD = 150\n\nexport const editorHandleTouchEnd = (editor, touchEvent) => {\n if (touchEvent.changedTouches.length === 0) {\n return\n }\n const firstTouch = touchEvent.changedTouches[0]\n const position = EditorPosition.at(editor, firstTouch.x, firstTouch.y)\n if (\n EditorMoveSelection.state.position.rowIndex === position.rowIndex &&\n EditorMoveSelection.state.position.columnIndex === position.columnIndex\n ) {\n if (Date.now() - EditorHandleTouchStart.state.date > LONG_TOUCH_THRESHOLD) {\n EditorSelectWord.editorSelectWord(\n editor,\n position.rowIndex,\n position.columnIndex\n )\n } else {\n EditorCursorSet.editorCursorSet(editor, position)\n }\n } else {\n console.log('different position')\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nexport const editorSetDeltaY = (editor, deltaY) => {\n return Editor.setDeltaY(editor, deltaY)\n}\n\nexport const setDeltaYFixedValue = (editor, deltaY) => {\n return Editor.setDeltaYFixedValue(editor, deltaY)\n}\n", "import * as EditorHandleTouchStart from './EditorCommandHandleTouchStart.js'\nimport * as EditorSetDeltaY from './EditorCommandSetDeltaY.js'\n\nexport const editorHandleTouchMove = (editor, touchEvent) => {\n if (touchEvent.touches.length === 0) {\n return\n }\n const firstTouch = touchEvent.touches[0]\n const offsetY =\n EditorHandleTouchStart.state.deltaY +\n (EditorHandleTouchStart.state.touchOffsetY - firstTouch.y)\n EditorSetDeltaY.setDeltaYFixedValue(editor, offsetY)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\nconst getNewSelections = (line, rowIndex) => {\n // TODO handle virtual space when columnIndex is greater than line length\n return new Uint32Array([rowIndex, 0, rowIndex, line.length])\n}\n\nexport const editorSelectLine = (editor) => {\n const selections = editor.selections\n const rowIndex = selections[editor.primarySelectionIndex]\n const line = TextDocument.getLine(editor, rowIndex)\n const newSelections = getNewSelections(line, rowIndex)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as EditorSelectLine from './EditorCommandSelectLine.js'\n\n// TODO rowIndex and columnIndex should already be set because of singleClick which occurred before triple click\nexport const editorHandleTripleClick = (editor, x, y, offset) => {\n Assert.object(editor)\n Assert.number(x)\n Assert.number(y)\n Assert.number(offset)\n return EditorSelectLine.editorSelectLine(editor)\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getChanges = (selections) => {\n const changes = []\n const rowsToIndentLess = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionEndRow = selections[i + 2]\n for (let i = selectionStartRow; i <= selectionEndRow; i++) {\n rowsToIndentLess.push(i)\n }\n }\n for (const rowToIndent of rowsToIndentLess) {\n changes.push({\n start: {\n rowIndex: rowToIndent,\n columnIndex: 0,\n },\n end: {\n rowIndex: rowToIndent,\n columnIndex: 2,\n },\n inserted: [''],\n deleted: [' '],\n origin: 'indentLess',\n })\n }\n return changes\n}\n\nexport const editorIndentLess = (editor) => {\n const selections = editor.selections\n const changes = getChanges(selections)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\nconst getChanges = (lines, selections) => {\n const changes = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const start = {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn,\n }\n const end = {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n }\n const range = {\n start,\n end,\n }\n if (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n ) {\n const line = lines[selectionStartRow].slice(0, selectionStartColumn)\n const indent = TextDocument.getIndent(line)\n changes.push({\n start: start,\n end: end,\n inserted: ['', indent],\n deleted: TextDocument.getSelectionText({ lines }, range),\n origin: 'insertLineBreak',\n })\n } else {\n changes.push({\n start: start,\n end: end,\n inserted: ['', ''],\n deleted: TextDocument.getSelectionText({ lines }, range),\n origin: 'insertLineBreak',\n })\n }\n }\n return changes\n}\n\nexport const editorInsertLineBreak = (editor) => {\n const lines = editor.lines\n const selections = editor.selections\n const changes = getChanges(lines, selections)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\n\n// TODO move cursor\n// TODO multiple cursors -> vscode removes multiple cursors\n// TODO with selection -> vscode moves whole selection\nexport const editorMoveLineDown = (editor) => {\n const rowIndex = editor.cursor.rowIndex\n if (rowIndex === editor.lines.length - 1) {\n return\n }\n const documentEdits = [\n {\n type: /* splice */ 2,\n rowIndex: rowIndex,\n count: 2,\n newLines: [\n TextDocument.getLine(editor.textDocument, rowIndex + 1),\n TextDocument.getLine(editor.textDocument, rowIndex),\n ],\n },\n ]\n const cursorEdits = Editor.moveCursors(editor, (editor, cursor) => {\n return {\n rowIndex: cursor.rowIndex + 1,\n columnIndex: cursor.columnIndex,\n }\n })\n Editor.scheduleDocumentAndCursors(editor, documentEdits, cursorEdits)\n}\n", "import * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\n\n// TODO handle multiple cursors\nexport const editorMoveLineUp = (editor) => {\n const rowIndex = editor.cursor.rowIndex\n if (rowIndex === 0) {\n return\n }\n const documentEdits = [\n {\n type: /* splice */ 2,\n rowIndex: rowIndex - 1,\n count: 2,\n newLines: [\n TextDocument.getLine(editor.textDocument, rowIndex),\n TextDocument.getLine(editor.textDocument, rowIndex - 1),\n ],\n },\n ]\n const cursorEdits = Editor.moveCursors(editor, (editor, cursor) => {\n return {\n // TODO handle bottom 0\n rowIndex: cursor.rowIndex - 1,\n columnIndex: cursor.columnIndex,\n }\n })\n Editor.scheduleDocumentAndCursors(editor, documentEdits, cursorEdits)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorHandleClick from './EditorCommandHandleSingleClick.js'\nimport * as EditorMoveSelection from './EditorCommandMoveSelection.js'\n\nexport const editorMoveRectangleSelection = (editor, position) => {\n const anchor = EditorMoveSelection.state.position\n const startRowIndex = anchor.rowIndex\n const startColumnIndex = anchor.columnIndex\n const endRowIndex = position.rowIndex\n const endColumnIndex = position.columnIndex\n const selectionEdits = []\n for (let i = startRowIndex; i <= endRowIndex; i++) {\n selectionEdits.push({\n start: {\n rowIndex: i,\n columnIndex: startColumnIndex,\n },\n end: {\n rowIndex: i,\n columnIndex: endColumnIndex,\n },\n })\n }\n const cursorEdits = [selectionEdits.at(-1).end]\n Editor.scheduleCursorsAndSelections(editor, cursorEdits, selectionEdits)\n}\n", "import * as EditorMoveRectangleSelection from './EditorCommandMoveRectangleSelection.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nexport const editorMoveRectangleSelectionPx = (editor, x, y) => {\n const position = EditorPosition.at(editor, x, y)\n EditorMoveRectangleSelection.editorMoveRectangleSelection(editor, position)\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as EditorMoveSelection from './EditorCommandMoveSelection.js'\nimport * as EditorPosition from './EditorCommandPosition.js'\n\nexport const editorMoveSelectionPx = (editor, x, y, offset) => {\n Assert.object(editor)\n Assert.number(x)\n Assert.number(y)\n Assert.number(offset)\n const position = EditorPosition.at(editor, x, y, offset)\n return EditorMoveSelection.editorMoveSelection(editor, position)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport { editorReplaceSelections } from './EditorCommandReplaceSelection.js'\n\nexport const editorPasteText = (editor, text) => {\n const insertedLines = text.split('\\n')\n const changes = editorReplaceSelections(\n editor,\n insertedLines,\n 'editorPasteText'\n )\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as EditorPasteText from './EditorCommandPasteText.js'\n\nexport const editorPaste = async (editor) => {\n const text = await Command.execute(\n /* ClipBoard.readText */ 'ClipBoard.readText'\n )\n Assert.string(text)\n return EditorPasteText.editorPasteText(editor, text)\n}\n", "import * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport { VError } from '../VError/VError.js'\n\nexport const editorSave = async (editor) => {\n const uri = editor.uri\n const content = TextDocument.getText(editor)\n try {\n await FileSystem.writeFile(uri, content)\n } catch (error) {\n // @ts-ignore\n const betterError = new VError(error, `Failed to save file \"${uri}\"`)\n await ErrorHandling.handleError(betterError)\n return\n }\n await GlobalEventBus.emitEvent('editor.save', editor)\n return editor\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n\nexport const editorSelectAll = (editor) => {\n const lines = editor.lines\n const startRowIndex = 0\n const startColumnIndex = 0\n const endRowIndex = lines.length\n const endColumnIndex = lines.at(-1).length\n const newSelections = EditorSelection.fromRange(\n startRowIndex,\n startColumnIndex,\n endRowIndex,\n endColumnIndex\n )\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Editor from '../Editor/Editor.js'\n\n// TODO handle virtual space\n\nconst getNewSelectionsSingleLineWord = (lines, word) => {\n if (word.length === 0) {\n throw new Error('word length must be greater than zero')\n }\n const newSelections = []\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]\n let columnIndex = -word.length\n while (\n (columnIndex = line.indexOf(word, columnIndex + word.length)) !== -1\n ) {\n newSelections.push(i, columnIndex, i, columnIndex + word.length)\n }\n }\n return new Uint32Array(newSelections)\n}\n\nconst isMultiLineMatch = (lines, rowIndex, wordParts) => {\n let j = 0\n if (!lines[rowIndex + j].endsWith(wordParts[j])) {\n return false\n }\n while (++j < wordParts.length - 1) {\n if (lines[rowIndex + j] !== wordParts[j]) {\n return false\n }\n }\n // j--\n if (!lines[rowIndex + j].startsWith(wordParts[j])) {\n lines[rowIndex + j] // ?\n rowIndex + j // ?\n\n return false\n }\n return true\n}\n\n// TODO this is very expensive, there might be a better algorithm for this\n// TODO if this matches the given selections, don't schedule selections/rerender\nconst getAllOccurrencesMultiLine = (lines, wordParts) => {\n const newSelections = []\n for (\n let rowIndex = 0;\n rowIndex < lines.length - wordParts.length + 1;\n rowIndex\n ) {\n lines\n rowIndex\n if (isMultiLineMatch(lines, rowIndex, wordParts)) {\n newSelections.push(\n rowIndex,\n lines[rowIndex].length - wordParts[0].length,\n rowIndex + wordParts.length - 1,\n wordParts.at(-1).length\n )\n rowIndex += wordParts.length - 1\n } else {\n rowIndex++\n }\n }\n return new Uint32Array(newSelections)\n}\n\n// TODO duplicate code with EditorSelectNextOccurrence\nconst RE_ALPHA_NUMERIC = /[a-zA-Z\\d]/\n\nconst isAlphaNumeric = (char) => {\n return RE_ALPHA_NUMERIC.test(char)\n}\n\nconst getWordStartIndex = (line, index) => {\n for (let i = index - 1; i >= 0; i--) {\n if (!isAlphaNumeric(line[i])) {\n return i + 1\n }\n }\n return 0\n}\n\nconst getWordEndIndex = (line, index) => {\n for (let i = index; i < line.length; i++) {\n if (!isAlphaNumeric(line[i])) {\n return i\n }\n }\n return line.length - 1\n}\n\nconst getWordMatchAtPosition = (lines, rowIndex, columnIndex) => {\n const line = lines[rowIndex]\n const start = getWordStartIndex(line, columnIndex)\n const end = getWordEndIndex(line, columnIndex)\n const word = line.slice(start, end)\n return {\n start,\n end,\n word,\n }\n}\n\nconst getNewSelections = (lines, selections) => {\n if (selections.length < 4) {\n throw new Error('selections must have at least one entry')\n }\n const firstSelectionIndex = 0\n const startRowIndex = selections[firstSelectionIndex]\n const startColumnIndex = selections[firstSelectionIndex + 1]\n const endRowIndex = selections[firstSelectionIndex + 2]\n const endColumnIndex = selections[firstSelectionIndex + 3]\n if (startRowIndex === endRowIndex) {\n if (startColumnIndex === endColumnIndex) {\n const wordMatch = getWordMatchAtPosition(\n lines,\n endRowIndex,\n endColumnIndex\n )\n if (wordMatch.start === wordMatch.end) {\n return selections\n }\n const newSelections = getNewSelectionsSingleLineWord(\n lines,\n wordMatch.word\n )\n return newSelections\n }\n const line = lines[startRowIndex]\n const word = line.slice(startColumnIndex, endColumnIndex)\n const newSelections = getNewSelectionsSingleLineWord(lines, word)\n return newSelections\n }\n const wordParts = []\n wordParts.push(lines[startRowIndex].slice(startColumnIndex))\n for (let i = startRowIndex + 1; i < endRowIndex - 1; i++) {\n wordParts.push(lines[i])\n }\n wordParts.push(lines[endRowIndex].slice(0, endColumnIndex))\n const newSelections = getAllOccurrencesMultiLine(lines, wordParts)\n return newSelections\n}\n\nexport const editorSelectAllOccurrences = (editor) => {\n // when there are no selections -> first selection is word -> find all selection that include word\n const lines = editor.lines\n const selections = editor.selections\n const newSelections = getNewSelections(lines, selections)\n return Editor.scheduleSelections(editor, newSelections)\n}\n\nconst editor = {\n lines: ['sample text, sample text'],\n primarySelectionIndex: 0,\n selections: new Uint32Array([0, 6, 0, 6]),\n}\n\neditorSelectAllOccurrences(editor)\n", "import * as Editor from '../Editor/Editor.js'\nimport * as EditorGetPositionLeft from './EditorCommandGetPositionLeft.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n// TODO interleave cursors and selection\n// then loop over selections\n// apply edit\n// if new range is empty -> add cursor\n// else if new range is overlapping -> merge ranges\n// else add cursor and selection\n\nconst getNewSelections = (selections, lines, getDelta) => {\n const newSelections = EditorSelection.clone(selections)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n ) {\n EditorGetPositionLeft.moveToPositionLeft(\n newSelections,\n i,\n selectionStartRow,\n selectionStartColumn,\n lines,\n getDelta\n )\n EditorGetPositionLeft.moveToPositionEqual(\n newSelections,\n i + 2,\n selectionEndRow,\n selectionEndColumn\n )\n }\n }\n return newSelections\n}\n\nexport const editorSelectHorizontalLeft = (editor, getDelta) => {\n const lines = editor.lines\n const selections = editor.selections\n const newSelections = getNewSelections(selections, lines, getDelta)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorSelectHorizontalLeft from './EditorCommandSelectHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorSelectCharacterLeft = (editor) => {\n return EditorSelectHorizontalLeft.editorSelectHorizontalLeft(\n editor,\n EditorDelta.characterLeft\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getNewSelections = (selections, lines, getDelta) => {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const line = lines[selectionEndRow]\n newSelections[i] = selectionStartRow\n newSelections[i + 1] = selectionStartColumn\n if (selectionEndColumn >= line.length) {\n newSelections[i + 2] = selectionEndRow + 1\n newSelections[i + 3] = 0\n } else {\n const delta = getDelta(line, selectionEndColumn)\n newSelections[i + 2] = selectionEndRow\n newSelections[i + 3] = selectionEndColumn + delta\n }\n }\n return newSelections\n}\n\nexport const editorSelectHorizontalRight = (editor, getDelta) => {\n const lines = editor.lines\n const selections = editor.selections\n const newSelections = getNewSelections(selections, lines, getDelta)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorSelectHorizontalRight from './EditorCommandSelectHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorSelectCharacterRight = (editor) => {\n return EditorSelectHorizontalRight.editorSelectHorizontalRight(\n editor,\n EditorDelta.characterRight\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getSelectUpChanges = (lines, selections) => {\n const max = lines.length - 1\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n newSelections[i] = selectionStartRow\n newSelections[i + 1] = selectionStartColumn\n newSelections[i + 2] = Math.min(selectionEndRow + 1, max)\n newSelections[i + 3] = selectionEndColumn\n }\n return newSelections\n}\n\nexport const selectDown = (editor) => {\n const { lines, selections } = editor\n const newSelections = getSelectUpChanges(lines, selections)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getNewSelections = (lines, selections) => {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n if (\n selectionStartRow === selectionEndRow &&\n selectionStartColumn === selectionEndColumn\n ) {\n const rowIndex = selectionStartRow\n let startColumnIndex = selectionStartColumn\n let endColumnIndex = selectionEndColumn\n const line = lines[rowIndex]\n const quoteFound = false\n while (startColumnIndex > 0 && line[startColumnIndex] !== '\"') {\n startColumnIndex--\n }\n startColumnIndex++\n while (endColumnIndex < line.length && line[endColumnIndex] !== '\"') {\n endColumnIndex++\n }\n newSelections[i] = rowIndex\n newSelections[i + 1] = startColumnIndex\n newSelections[i + 2] = rowIndex\n newSelections[i + 3] = endColumnIndex\n } else {\n newSelections[i] = selectionStartRow\n newSelections[i + 1] = selectionStartColumn\n newSelections[i + 2] = selectionEndRow\n newSelections[i + 3] = selectionEndColumn\n }\n }\n return newSelections\n}\n\nexport const editorSelectInsideString = (editor) => {\n const selections = editor.selections\n const lines = editor.lines\n const newSelections = getNewSelections(lines, selections)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as EditorSelection from '../EditorSelection/EditorSelection.js'\n// TODO handle virtual space\n\n// TODO editors behave differently when selecting next occurrence, for example:\n\n// aaa\n// bbb 1\n// ccc\n// bbb 2\n// bbb 3\n// aaa\n// bbb 4\n// ccc\n\n// when clicking first at position 4 and then position 2,\n// - vscode selects next position 3 and refuses to select position 1\n// - atom also selects next position 3 and refuses to select position 1\n// - WebStorm also selects next position 3 and refuses to select position 1\n// - brackets (codemirror) selects position 3 and then selects position 1\n// - sublime selects next position 1, then next position 3\n\nconst isBetween = (value, min, max) => {\n return min <= value && value <= max\n}\n\nconst getSelectionEditsSingleLineWord = (lines, selections) => {\n const lastSelectionIndex = selections.length - 4\n const rowIndex = selections[lastSelectionIndex]\n const lastSelectionStartColumnIndex = selections[lastSelectionIndex + 1]\n const lastSelectionEndColumnIndex = selections[lastSelectionIndex + 3]\n const line = lines[rowIndex]\n const word = line.slice(\n lastSelectionStartColumnIndex,\n lastSelectionEndColumnIndex\n )\n const columnIndexAfter = line.indexOf(word, lastSelectionEndColumnIndex)\n if (columnIndexAfter !== -1) {\n const columnIndexAfterEnd = columnIndexAfter + word.length\n const revealRange = {\n start: {\n rowIndex,\n columnIndex: columnIndexAfter,\n },\n end: {\n rowIndex,\n columnIndex: columnIndexAfterEnd,\n },\n }\n const newSelections = EditorSelection.push(\n selections,\n rowIndex,\n columnIndexAfter,\n rowIndex,\n columnIndexAfterEnd\n )\n return {\n revealRange: newSelections.length - 4,\n selectionEdits: newSelections,\n }\n }\n for (let i = rowIndex + 1; i < lines.length; i++) {\n const line = lines[i]\n const columnIndex = line.indexOf(word)\n if (columnIndex !== -1) {\n const columnIndexEnd = columnIndex + word.length\n const newSelections = new Uint32Array(selections.length + 4)\n newSelections.set(selections, 0)\n const insertIndex = selections.length\n newSelections[insertIndex] = i\n newSelections[insertIndex + 1] = columnIndex\n newSelections[insertIndex + 2] = i\n newSelections[insertIndex + 3] = columnIndexEnd\n return {\n revealRange: newSelections.length - 4,\n selectionEdits: newSelections,\n }\n }\n }\n let selectionIndex = 0\n for (let i = 0; i <= rowIndex; i++) {\n const line = lines[i]\n let columnIndex = -word.length\n while (\n (columnIndex = line.indexOf(word, columnIndex + word.length)) !== -1\n ) {\n let startRowIndex = selections[selectionIndex]\n while (startRowIndex < i && selectionIndex < selections.length) {\n selectionIndex += 4\n startRowIndex = selections[selectionIndex]\n }\n if (startRowIndex === i) {\n let endColumnIndex = selections[selectionIndex + 3]\n while (\n endColumnIndex < columnIndex &&\n selectionIndex < selections.length\n ) {\n selectionIndex += 4\n endColumnIndex = selections[endColumnIndex + 3]\n }\n }\n startRowIndex = selections[selectionIndex]\n let startColumnIndex = selections[selectionIndex + 1]\n let endColumnIndex = selections[selectionIndex + 3]\n if (\n startRowIndex === i &&\n startColumnIndex <= columnIndex &&\n columnIndex <= endColumnIndex\n ) {\n continue\n }\n if (startRowIndex > i) {\n selectionIndex -= 4\n }\n const columnEndIndex = columnIndex + word.length\n const revealRange = {\n start: {\n rowIndex: i,\n columnIndex,\n },\n end: {\n rowIndex: i,\n columnIndex: columnEndIndex,\n },\n }\n selectionIndex += 4\n const newSelections = new Uint32Array(selections.length + 4)\n newSelections.set(selections.subarray(0, selectionIndex), 0)\n newSelections[selectionIndex] = i\n newSelections[selectionIndex + 1] = columnIndex\n newSelections[selectionIndex + 2] = i\n newSelections[selectionIndex + 3] = columnEndIndex\n newSelections.set(selections.subarray(selectionIndex), selectionIndex + 4)\n return {\n revealRange,\n selectionEdits: newSelections,\n }\n }\n }\n return undefined\n}\n\nconst RE_ALPHA_NUMERIC = /[a-zA-Z\\d]/\n\nconst isAlphaNumeric = (char) => {\n return RE_ALPHA_NUMERIC.test(char)\n}\n\nconst getWordStartIndex = (line, index) => {\n for (let i = index - 1; i >= 0; i--) {\n if (!isAlphaNumeric(line[i])) {\n return i + 1\n }\n }\n return 0\n}\n\nconst getWordEndIndex = (line, index) => {\n for (let i = index; i < line.length; i++) {\n if (!isAlphaNumeric(line[i])) {\n return i\n }\n }\n return line.length - 1\n}\n\nconst getWordMatchAtPosition = (lines, rowIndex, columnIndex) => {\n const line = lines[rowIndex]\n const index = columnIndex\n const start = getWordStartIndex(line, index)\n const end = getWordEndIndex(line, index)\n const word = line.slice(start, end)\n return {\n start,\n end,\n word,\n }\n}\n\nconst getSelectNextOccurrenceResult = (editor) => {\n const lines = editor.lines\n const selections = editor.selections\n if (EditorSelection.isEverySelectionEmpty(selections)) {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const startRowIndex = selections[i]\n const startColumnIndex = selections[i + 1]\n const endRowIndex = selections[i + 2]\n const endColumnIndex = selections[i + 3]\n\n const wordMatch = getWordMatchAtPosition(\n lines,\n startRowIndex,\n startColumnIndex\n )\n wordMatch //?\n if (wordMatch.start === wordMatch.end) {\n newSelections[i] = startRowIndex\n newSelections[i + 1] = startColumnIndex\n newSelections[i + 2] = endRowIndex\n newSelections[i + 3] = endColumnIndex\n } else {\n newSelections[i] = startRowIndex\n newSelections[i + 1] = wordMatch.start\n newSelections[i + 2] = startRowIndex\n newSelections[i + 3] = wordMatch.end\n }\n }\n\n return {\n selectionEdits: newSelections,\n revealRange: newSelections.length - 4, // TODO should be primary selection\n }\n }\n\n if (EditorSelection.isEverySelectionSingleLine(editor.selections)) {\n return getSelectionEditsSingleLineWord(editor.lines, editor.selections)\n }\n return undefined\n}\n\nconst isRangeInViewPort = (minLineY, maxLineY, startRowIndex, endRowIndex) => {\n return startRowIndex >= minLineY && endRowIndex <= maxLineY\n}\n\n// TODO handle virtual space\nexport const editorSelectNextOccurrence = (editor) => {\n const result = getSelectNextOccurrenceResult(editor)\n if (!result) {\n return editor\n }\n const revealRange = result.revealRange\n const selectionEdits = result.selectionEdits\n const revealRangeStartRowIndex = selectionEdits[revealRange]\n const revealRangeEndRowIndex = selectionEdits[revealRange + 2]\n if (\n isRangeInViewPort(\n editor.minLineY,\n editor.maxLineY,\n revealRangeStartRowIndex,\n revealRangeEndRowIndex\n )\n ) {\n return Editor.scheduleSelections(editor, selectionEdits)\n }\n // TODO what is this magic number 5?\n const deltaY = (revealRangeStartRowIndex - 5) * editor.rowHeight\n return Editor.scheduleSelectionsAndScrollPosition(\n editor,\n selectionEdits,\n deltaY\n )\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst getSelectUpChanges = (lines, selections) => {\n const newSelections = new Uint32Array(selections.length)\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n newSelections[i] = Math.max(selectionStartRow - 1, 0)\n newSelections[i + 1] = selectionStartColumn\n newSelections[i + 2] = selectionEndRow\n newSelections[i + 3] = selectionEndColumn\n }\n return newSelections\n}\n\nexport const selectUp = (editor) => {\n const { lines, selections } = editor\n const newSelections = getSelectUpChanges(lines, selections)\n return Editor.scheduleSelections(editor, newSelections)\n}\n", "import * as EditorSelectHorizontalLeft from './EditorCommandSelectHorizontalLeft.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorSelectWordLeft = (editor) => {\n return EditorSelectHorizontalLeft.editorSelectHorizontalLeft(\n editor,\n EditorDelta.wordLeft\n )\n}\n", "import * as EditorSelectHorizontalRight from './EditorCommandSelectHorizontalRight.js'\nimport * as EditorDelta from './EditorCommandDelta.js'\n\nexport const editorSelectWordRight = (editor) => {\n return EditorSelectHorizontalRight.editorSelectHorizontalRight(\n editor,\n EditorDelta.wordRight\n )\n}\n", "export const setDecorations = (editor, decorations) => {\n return {\n ...editor,\n decorations,\n }\n}\n", "import * as Tokenizer from '../Tokenizer/Tokenizer.js'\nimport * as ViewletState from '../ViewletStates/ViewletStates.js'\n\nexport const setLanguageId = async (editor, languageId) => {\n // TODO only load tokenizer if not already loaded\n // if already loaded just set tokenizer and rerender text\n await Tokenizer.loadTokenizer(languageId)\n const tokenizer = Tokenizer.getTokenizer(languageId)\n if (tokenizer === editor.tokenizer) {\n return ViewletState.getState('EditorText')\n }\n // TODO update syntax highlighting\n // TODO get edits\n\n const latestEditor = ViewletState.getState('EditorText')\n\n return {\n ...latestEditor,\n languageId,\n invalidStartIndex: 0,\n tokenizer,\n }\n}\n", "import * as Compare from '../Compare/Compare.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\nconst getSortedLines = (lines) => {\n const newLines = [...lines]\n newLines.sort(Compare.compareString)\n return newLines\n}\n\nconst origin = 'sort-lines-ascending'\n\nconst getSortLinesAscendingChanges = (lines, selections) => {\n const startRowIndex = selections[0]\n const startColumnIndex = selections[1]\n const endRowIndex = selections[2]\n const endColumnIndex = selections[3]\n const startRow = lines[startRowIndex]\n const endRow = lines[endRowIndex]\n const changes = []\n for (let i = 0; i < selections.length; i += 4) {\n const selectionStartRow = selections[i]\n const selectionStartColumn = selections[i + 1]\n const selectionEndRow = selections[i + 2]\n const selectionEndColumn = selections[i + 3]\n const start = {\n rowIndex: selectionStartRow,\n columnIndex: selectionStartColumn,\n }\n const end = {\n rowIndex: selectionEndRow,\n columnIndex: selectionEndColumn,\n }\n const selection = {\n start,\n end,\n }\n const selectionLines = lines.slice(startRowIndex, endRowIndex + 1)\n const sortedSelectionLines = getSortedLines(selectionLines)\n changes.push({\n start: start,\n end: end,\n inserted: sortedSelectionLines,\n deleted: TextDocument.getSelectionText({ lines }, selection),\n origin,\n })\n }\n return changes\n}\n\nexport const sortLinesAscending = (editor) => {\n const { lines, selections } = editor\n const changes = getSortLinesAscendingChanges(lines, selections)\n return Editor.scheduleDocumentAndCursorsSelections(editor, changes)\n}\n", "import * as Languages from '../Languages/Languages.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Editor from '../Editor/Editor.js'\n\nconst RE_WHITESPACE_AT_START = /^\\s+/\nconst RE_WHITESPACE_AT_END = /\\s+$/\n\n// const blockComment = ['<!--', '-->']\n\nconst getBlockComment = async (editor) => {\n const languageConfiguration = await Languages.getLanguageConfiguration(editor)\n console.log({ languageConfiguration })\n if (\n !languageConfiguration ||\n !languageConfiguration.comments ||\n !languageConfiguration.comments.blockComment\n ) {\n return undefined\n }\n return languageConfiguration.comments.blockComment\n}\n\nexport const editorToggleBlockComment = async (editor) => {\n console.log('languages have loaded')\n console.log({ editor: { ...editor } })\n const blockComment = await getBlockComment(editor)\n if (!blockComment) {\n return editor\n }\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const line = TextDocument.getLine(editor, rowIndex)\n const numberOfLines = editor.lines.length\n let endRowIndex = rowIndex\n let endColumnIndex = -1\n const blockCommentStart = blockComment[0]\n const blockCommentEnd = blockComment[1]\n while (endRowIndex < numberOfLines) {\n const line = TextDocument.getLine(editor, endRowIndex)\n endColumnIndex = line.indexOf(blockCommentEnd)\n if (endColumnIndex !== -1) {\n break\n }\n endRowIndex++\n }\n let startColumnIndex = -1\n let startRowIndex = rowIndex\n while (startRowIndex >= 0) {\n const line = TextDocument.getLine(editor, startRowIndex)\n startColumnIndex = line.indexOf(blockCommentStart)\n if (startColumnIndex !== -1) {\n break\n }\n startRowIndex--\n }\n const changes = []\n\n if (startColumnIndex !== -1 && endColumnIndex !== -1) {\n if (startRowIndex === endRowIndex) {\n const change1 = {\n start: {\n rowIndex,\n columnIndex: startColumnIndex,\n },\n end: {\n rowIndex,\n columnIndex: startColumnIndex + blockCommentStart.length,\n },\n inserted: [],\n deleted: [blockCommentStart],\n origin: 'toggleBlockComment',\n }\n const change2 = {\n start: {\n rowIndex,\n columnIndex: endColumnIndex - blockCommentStart.length,\n },\n end: {\n rowIndex,\n columnIndex:\n endColumnIndex - blockCommentStart.length + blockCommentEnd.length,\n },\n inserted: [],\n deleted: [blockCommentEnd],\n origin: 'toggleBlockComment',\n }\n changes.push(change1, change2)\n // Editor.moveCursors(editor, (editor, cursor) => {\n // let newColumnIndex = cursor.columnIndex - blockComment[0].length\n // if (cursor.columnIndex === endColumnIndex + blockComment[1].length) {\n // newColumnIndex -= blockComment[1].length\n // }\n // return {\n // rowIndex: cursor.rowIndex,\n // columnIndex: newColumnIndex,\n // }\n // })\n } else {\n const change1 = {\n start: {\n rowIndex: startRowIndex,\n columnIndex: startColumnIndex,\n },\n end: {\n rowIndex: startRowIndex,\n columnIndex: startColumnIndex + blockCommentStart.length,\n },\n inserted: [],\n deleted: [blockCommentStart],\n origin: 'toggleBlockComment',\n }\n const change2 = {\n start: {\n rowIndex: endRowIndex,\n columnIndex: endColumnIndex,\n },\n end: {\n rowIndex: endRowIndex,\n columnIndex: endColumnIndex + blockCommentEnd.length,\n },\n inserted: [],\n deleted: [blockCommentEnd],\n origin: 'toggleBlockComment',\n }\n changes.push(change1, change2)\n\n // const oldRow1 = TextDocument.getLine(editor, startRowIndex)\n // const newRow1 =\n // oldRow1.slice(0, startColumnIndex) +\n // oldRow1.slice(startColumnIndex + blockCommentStart.length)\n // const oldRow2 = TextDocument.getLine(editor, endRowIndex)\n // const newRow2 =\n // oldRow2.slice(0, endColumnIndex) +\n // oldRow2.slice(endColumnIndex + blockCommentEnd.length)\n // // TODO use applyEdit to have undo functionality\n // TextDocument.setLine(editor, startRowIndex, newRow1)\n // TextDocument.setLine(editor, endRowIndex, newRow2)\n }\n // TODO move cursors\n } else {\n const whitespaceAtStart = line.match(RE_WHITESPACE_AT_START)\n const whitespaceAtEnd = line.match(RE_WHITESPACE_AT_END)\n let startColumnIndex = 0\n let endColumnIndex = line.length\n if (whitespaceAtStart) {\n startColumnIndex += whitespaceAtStart[0].length\n }\n if (whitespaceAtEnd) {\n endColumnIndex -= whitespaceAtEnd[0].length\n }\n const change1 = {\n start: {\n rowIndex,\n columnIndex: startColumnIndex,\n },\n end: {\n rowIndex,\n columnIndex: startColumnIndex,\n },\n inserted: [blockCommentStart],\n deleted: [],\n origin: 'toggleBlockComment',\n }\n const change2 = {\n start: {\n rowIndex,\n columnIndex: endColumnIndex + blockCommentStart.length,\n },\n end: {\n rowIndex,\n columnIndex: endColumnIndex + blockCommentStart.length,\n },\n inserted: [blockCommentEnd],\n deleted: [],\n origin: 'toggleBlockComment',\n }\n changes.push(change1, change2)\n // TextDocument.setLine(\n // editor,\n // rowIndex,\n // line.slice(0, startColumnIndex) +\n // blockComment[0] +\n // line.slice(startColumnIndex, endColumnIndex) +\n // blockComment[1] +\n // line.slice(endColumnIndex)\n // )\n // Editor.moveCursors(editor, (editor, cursor) => {\n // let newColumnIndex = cursor.columnIndex + blockComment[0].length\n // if (cursor.columnIndex === endColumnIndex) {\n // newColumnIndex += blockComment[1].length\n // }\n // return {\n // rowIndex: cursor.rowIndex,\n // columnIndex: newColumnIndex,\n // }\n // })\n }\n // if (line.startsWith(blockComment[0]) && line.endsWith(blockComment[1])) {\n // lines[rowIndex] = line.slice(\n // blockComment[0].length,\n // line.length - blockComment[1].length\n // )\n // Editor.moveCursors((editor, cursor) => {\n // return {\n // rowIndex: cursor.rowIndex,\n // columnIndex: cursor.columnIndex - blockComment[0].length,\n // }\n // })\n // } else {\n // lines[rowIndex] = blockComment[0] + line + blockComment[1]\n // Editor.moveCursors((editor, cursor) => {\n // return {\n // rowIndex: cursor.rowIndex,\n // columnIndex: cursor.columnIndex + blockComment[0].length,\n // }\n // })\n // }\n // RendererProcess.invoke(/* setLines */ 2135, /* lines */ lines)\n\n return Editor.scheduleDocument(editor, changes)\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\n\n// TODO\nconst getLanguageAtPosition = (position) => {\n return 'html'\n}\n\nconst getLineComment = async (editor) => {\n const languageConfiguration = await Languages.getLanguageConfiguration(editor)\n if (\n !languageConfiguration ||\n !languageConfiguration.comments ||\n !languageConfiguration.comments.lineComment\n ) {\n return undefined\n }\n return languageConfiguration.comments.lineComment\n}\n\nconst getBlockComment = async (languageId) => {\n const languageConfiguration = await Languages.getLanguageConfiguration(\n languageId\n )\n if (\n !languageConfiguration ||\n !languageConfiguration.comments ||\n !languageConfiguration.comments.blockComment\n ) {\n return undefined\n }\n return languageConfiguration.comments.blockComment\n}\n\nconst RE_WHITESPACE_AT_START = /^\\s+/\n\nconst getLineCommentEdit = (rowIndex, line, lineComment) => {\n const whitespaceMatch = line.match(RE_WHITESPACE_AT_START)\n const index = whitespaceMatch ? whitespaceMatch[0] : 0\n if (line.slice(index).startsWith(lineComment)) {\n // TODO also check tab character\n if (line[index + lineComment.length] === ' ') {\n return {\n inserted: [''],\n deleted: [lineComment.length + 1],\n start: {\n rowIndex,\n columnIndex: index,\n },\n end: {\n rowIndex,\n columnIndex: index + lineComment.length + 1,\n },\n type: /* singleLineEdit */ 1,\n }\n }\n return {\n inserted: [''],\n deleted: [lineComment],\n start: {\n rowIndex,\n columnIndex: index,\n },\n end: {\n rowIndex,\n columnIndex: index + lineComment.length,\n },\n type: /* singleLineEdit */ 1,\n }\n }\n return {\n inserted: [`${lineComment} `],\n deleted: [],\n start: {\n rowIndex,\n columnIndex: index,\n },\n end: {\n rowIndex,\n columnIndex: index,\n },\n type: /* singleLineEdit */ 1,\n }\n}\n\nexport const editorToggleLineComment = async (editor) => {\n console.log('TOGGLE COMMENT')\n\n const lineComment = await getLineComment(editor)\n if (!lineComment) {\n return editor\n }\n // replaceSelections(editor, lineComment, 'editorToggleLineComment')\n const textDocument = editor\n const cursorRowIndex = editor.selections[0]\n const line = TextDocument.getLine(textDocument, cursorRowIndex)\n const documentEdits = [getLineCommentEdit(cursorRowIndex, line, lineComment)]\n // TODO cursor edits should be computed automatically from document edits\n // console.log({ documentEdits })\n // const cursorEdits = Editor.moveCursors(editor, (editor, cursor) => {\n // return cursor\n // })\n return Editor.scheduleDocumentAndCursorsSelections(editor, documentEdits)\n}\n", "import * as EditorToggleBlockComment from './EditorCommandToggleBlockComment.js'\nimport * as EditorToggleLineComment from './EditorCommandToggleLineComment.js'\nimport * as EditorShowMessage from './EditorCommandShowMessage.js'\n// TODO rename file\n// TODO when handle case when editor has selection\nexport const editorToggleComment = async (editor) => {\n try {\n const newEditor = await EditorToggleLineComment.editorToggleLineComment(\n editor\n )\n if (editor !== newEditor) {\n return newEditor\n }\n return EditorToggleBlockComment.editorToggleBlockComment(editor)\n } catch (error) {\n console.error(error)\n // TODO use correct position\n await EditorShowMessage.editorShowMessage(\n /* editor */ editor,\n /* rowIndex */ 0,\n /* columnIndex */ 0,\n /* message */ `${error}`,\n /* isError */ true\n )\n return editor\n }\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst inverseChange = (edit) => {\n const endColumnIndex =\n edit.end.columnIndex - edit.deleted[0].length + edit.inserted[0].length\n return {\n start: edit.start,\n end: {\n rowIndex: edit.end.rowIndex,\n columnIndex: endColumnIndex,\n },\n inserted: edit.deleted,\n deleted: edit.inserted,\n }\n}\n\nexport const editorUndo = (editor) => {\n if (editor.undoStack.length === 0) {\n return\n }\n const last = editor.undoStack.pop()\n const inverseChanges = last.map(inverseChange)\n Editor.scheduleDocumentAndCursorsSelections(editor, inverseChanges)\n}\n", "import * as Editor from '../Editor/Editor.js'\n\nconst INDENT = ' '\n\nexport const editorUnindent = (editor) => {\n if (Editor.hasSelection(editor)) {\n const documentEdits = []\n const cursorEdits = []\n const selectionEdits = []\n const canUnindentSelection = (selection) => {\n for (let i = selection.start.rowIndex; i <= selection.end.rowIndex; i++) {\n if (editor.lines[i].startsWith(INDENT)) {\n return true\n }\n }\n return false\n }\n // TODO replace check with flag that indicates whether change occurred\n // -> only iterate once over selection lines\n\n if (!editor.selections.some(canUnindentSelection)) {\n return\n }\n const indentLineMaybe = (rowIndex) => {\n if (editor.lines[rowIndex].startsWith(INDENT)) {\n documentEdits.push({\n type: /* singleLineEdit */ 1,\n rowIndex,\n columnIndex: INDENT.length,\n deleted: INDENT.length,\n inserted: '',\n })\n }\n }\n let previousRowIndex = -1\n for (const selection of editor.selections) {\n let startRowIndex = selection.start.rowIndex\n const endRowIndex = selection.end.rowIndex\n if (startRowIndex === previousRowIndex) {\n startRowIndex++\n }\n for (let i = startRowIndex; i <= endRowIndex; i++) {\n indentLineMaybe(i)\n }\n let start = selection.start\n let end = selection.end\n if (editor.lines[start.rowIndex].startsWith(INDENT)) {\n start = {\n rowIndex: start.rowIndex,\n columnIndex: Math.max(start.columnIndex - INDENT.length, 0),\n }\n }\n if (editor.lines[end.rowIndex].startsWith(INDENT)) {\n end = {\n rowIndex: end.rowIndex,\n columnIndex: Math.max(end.columnIndex - INDENT.length, 0),\n }\n }\n cursorEdits.push(end)\n selectionEdits.push({\n start,\n end,\n })\n previousRowIndex = endRowIndex\n }\n Editor.scheduleDocumentAndCursorsAndSelections(\n editor,\n documentEdits,\n cursorEdits,\n selectionEdits\n )\n return\n }\n const documentEdits = []\n const cursorEdits = []\n if (!editor.lines[editor.cursor.rowIndex].startsWith(INDENT)) {\n return\n }\n documentEdits.push({\n type: /* singleLineEdit */ 1,\n rowIndex: editor.cursor.rowIndex,\n inserted: '',\n columnIndex: 2,\n deleted: 2,\n })\n cursorEdits.push({\n rowIndex: editor.cursor.rowIndex,\n columnIndex: editor.cursor.columnIndex - 2,\n })\n Editor.scheduleDocumentAndCursors(editor, documentEdits, cursorEdits)\n}\n// const editor = {\n// textDocument: {\n// lines: [' line 1'],\n// },\n// cursor: {\n// rowIndex: 0,\n// columnIndex: 8,\n// },\n// selections: [\n// {\n// start: {\n// rowIndex: 0,\n// columnIndex: 0,\n// },\n// end: {\n// rowIndex: 0,\n// columnIndex: 8,\n// },\n// },\n// ],\n// tokenizer: TokenizePlainText,\n// }\n// editorUnindent(editor)\n\n// editor.lines //?\n", "import * as LazyCommand from '../LazyCommand/LazyCommand.js'\n\n// prettier-ignore\nconst Imports = {\n ApplyEdit: () => import('../EditorCommand/EditorCommandApplyEdit.js'),\n Blur: () => import('../EditorCommand/EditorCommandBlur.js'),\n BraceCompletion: () => import('../EditorCommand/EditorCommandBraceCompletion.js'),\n CancelSelection: () => import('../EditorCommand/EditorCommandCancelSelection.js'),\n ContextMenu: () => import('../EditorCommand/EditorCommandHandleContextMenu.js'),\n CopyLineDown: () => import('../EditorCommand/EditorCommandCopyLineDown.js'),\n CopyLineUp: () => import('../EditorCommand/EditorCommandCopyLineUp.js'),\n CursorCharacterLeft: () => import('../EditorCommand/EditorCommandCursorCharacterLeft.js'),\n CursorCharacterRight: () => import('../EditorCommand/EditorCommandCursorCharacterRight.js'),\n CursorDown: () => import('../EditorCommand/EditorCommandCursorDown.js'),\n CursorEnd: () => import('../EditorCommand/EditorCommandCursorEnd.js'),\n CursorHome: () => import('../EditorCommand/EditorCommandCursorHome.js'),\n CursorSet: () => import('../EditorCommand/EditorCommandCursorSet.js'),\n CursorUp: () => import('../EditorCommand/EditorCommandCursorUp.js'),\n CursorWordLeft: () => import('../EditorCommand/EditorCommandCursorWordLeft.js'),\n CursorWordPartLeft: () => import('../EditorCommand/EditorCommandCursorWordPartLeft.js'),\n CursorWordPartRight: () => import('../EditorCommand/EditorCommandCursorWordPartRight.js'),\n CursorWordRight: () => import('../EditorCommand/EditorCommandCursorWordRight.js'),\n Cut: () => import('../EditorCommand/EditorCommandCut.js'),\n DeleteAllLeft: () => import('../EditorCommand/EditorCommandDeleteAllLeft.js'),\n DeleteAllRight: () => import('../EditorCommand/EditorCommandDeleteAllRight.js'),\n DeleteLeft: () => import('../EditorCommand/EditorCommandDeleteCharacterLeft.js'),\n DeleteRight: () => import('../EditorCommand/EditorCommandDeleteCharacterRight.js'),\n DeleteWordLeft: () => import('../EditorCommand/EditorCommandDeleteWordLeft.js'),\n DeleteWordPartLeft: () => import('../EditorCommand/EditorCommandDeleteWordPartLeft.js'),\n DeleteWordPartRight: () => import('../EditorCommand/EditorCommandDeleteWordPartRight.js'),\n DeleteWordRight: () => import('../EditorCommand/EditorCommandDeleteWordRight.js'),\n EditorCompletion: () => import('../EditorCommand/EditorCommandCompletion.js'),\n EditorComposition: () => import('../EditorCommand/EditorCommandComposition.js'),\n EditorCopy: () => import('../EditorCommand/EditorCommandCopy.js'),\n Format: () => import('../EditorCommand/EditorCommandFormat.js'),\n GoToDefinition: () => import('../EditorCommand/EditorCommandGoToDefinition.js'),\n GoToTypeDefinition: () => import('../EditorCommand/EditorCommandGoToTypeDefinition.js'),\n HandleBeforeInputFromContentEditable: () => import('../EditorCommand/EditorCommandHandleNativeBeforeInputFromContentEditable.js'),\n HandleDoubleClick: () => import('../EditorCommand/EditorCommandHandleDoubleClick.js'),\n HandleMouseMove: () => import('../EditorCommand/EditorCommandHandleMouseMove.js'),\n HandleMouseMoveWithAltKey: () => import('../EditorCommand/EditorCommandHandleMouseMoveWithAltKey.js'),\n HandleNativeSelectionChange: () => import('../EditorCommand/EditorCommandHandleNativeSelectionChange.js'),\n HandleScrollBarClick: () => import('../EditorCommand/EditorCommandHandleScrollBarClick.js'),\n HandleScrollBarMove: () => import('../EditorCommand/EditorCommandHandleScrollBarMove.js'),\n HandleSingleClick: () => import('../EditorCommand/EditorCommandHandleSingleClick.js'),\n HandleTab: () => import('../EditorCommand/EditorCommandHandleTab.js'),\n HandleTouchEnd: () => import('../EditorCommand/EditorCommandHandleTouchEnd.js'),\n HandleTouchMove: () => import('../EditorCommand/EditorCommandHandleTouchMove.js'),\n HandleTouchStart: () => import('../EditorCommand/EditorCommandHandleTouchStart.js'),\n HandleTripleClick: () => import('../EditorCommand/EditorCommandHandleTripleClick.js'),\n IndentLess: () => import('../EditorCommand/EditorCommandIndentLess.js'),\n IndentMore: () => import('../EditorCommand/EditorCommandIndentMore.js'),\n InsertLineBreak: () => import('../EditorCommand/EditorCommandInsertLineBreak.js'),\n MoveLineDown: () => import('../EditorCommand/EditorCommandMoveLineDown.js'),\n MoveLineUp: () => import('../EditorCommand/EditorCommandMoveLineUp.js'),\n MoveRectangleSelection: () => import('../EditorCommand/EditorCommandMoveRectangleSelection.js'),\n MoveRectangleSelectionPx: () => import('../EditorCommand/EditorCommandMoveRectangleSelectionPx.js'),\n MoveSelection: () => import('../EditorCommand/EditorCommandMoveSelection.js'),\n MoveSelectionPx: () => import('../EditorCommand/EditorCommandMoveSelectionPx.js'),\n Paste: () => import('../EditorCommand/EditorCommandPaste.js'),\n PasteText: () => import('../EditorCommand/EditorCommandPasteText.js'),\n Save: () => import('../EditorCommand/EditorCommandSave.js'),\n SelectAll: () => import('../EditorCommand/EditorCommandSelectAll.js'),\n SelectAllOccurrences: () => import('../EditorCommand/EditorCommandSelectAllOccurrences.js'),\n SelectCharacterLeft: () => import('../EditorCommand/EditorCommandSelectCharacterLeft.js'),\n SelectCharacterRight: () => import('../EditorCommand/EditorCommandSelectCharacterRight.js'),\n SelectDown: () => import('../EditorCommand/EditorCommandSelectDown.js'),\n SelectInsideString: () => import('../EditorCommand/EditorCommandSelectInsideString.js'),\n SelectLine: () => import('../EditorCommand/EditorCommandSelectLine.js'),\n SelectNextOccurrence: () => import('../EditorCommand/EditorCommandSelectNextOccurrence.js'),\n SelectUp: () => import('../EditorCommand/EditorCommandSelectUp.js'),\n SelectWord: () => import('../EditorCommand/EditorCommandSelectWord.js'),\n SelectWordLeft: () => import('../EditorCommand/EditorCommandSelectWordLeft.js'),\n SelectWordRight: () => import('../EditorCommand/EditorCommandSelectWordRight.js'),\n SetDecorations: () => import('../EditorCommand/EditorCommandSetDecorations.js'),\n SetDeltaY: () => import('../EditorCommand/EditorCommandSetDeltaY.js'),\n SetLanguageId: () => import('../EditorCommand/EditorCommandSetLanguageId.js'),\n SortLinesAscending: () => import('../EditorCommand/EditorCommandSortLinesAscending.js'),\n TabCompletion: () => import('../EditorCommand/EditorCommandTabCompletion.js'),\n ToggleBlockComment: () => import('../EditorCommand/EditorCommandToggleBlockComment.js'),\n ToggleComment: () => import('../EditorCommand/EditorCommandToggleComment.js'),\n Type: () => import('../EditorCommand/EditorCommandType.js'),\n Undo: () => import('../EditorCommand/EditorCommandUndo.js'),\n UnIndent: () => import('../EditorCommand/EditorCommandUnindent.js'),\n}\n\n// prettier-ignore\nexport const Commands = {\n // TODO command to set cursor position\n 'Editor.applyEdit': LazyCommand.create('EditorText', Imports.ApplyEdit, 'editorApplyEdit'),\n 'Editor.blur': LazyCommand.create('EditorText', Imports.Blur, 'editorBlur'), // TODO needed?\n 'Editor.braceCompletion': LazyCommand.create('EditorText', Imports.BraceCompletion, 'editorBraceCompletion'),\n 'Editor.cancelSelection': LazyCommand.create('EditorText', Imports.CancelSelection, 'editorCancelSelection'),\n 'Editor.close': LazyCommand.create('EditorText', Imports.EditorCompletion, 'close'),\n 'Editor.compositionEnd': LazyCommand.create('EditorText', Imports.EditorComposition,'editorCompositionEnd'),\n 'Editor.compositionStart': LazyCommand.create('EditorText', Imports.EditorComposition,'editorCompositionStart'),\n 'Editor.compositionUpdate': LazyCommand.create('EditorText', Imports.EditorComposition,'editorCompositionUpdate'),\n 'Editor.copy': LazyCommand.create('EditorText', Imports.EditorCopy, 'editorCopy'),\n 'Editor.copyLineDown': LazyCommand.create('EditorText', Imports.CopyLineDown, 'editorCopyLineDown'),\n 'Editor.copyLineUp': LazyCommand.create('EditorText', Imports.CopyLineUp, 'editorCopyLineUp'),\n 'Editor.cursorCharacterLeft': LazyCommand.create('EditorText', Imports.CursorCharacterLeft, 'editorCursorCharacterLeft'),\n 'Editor.cursorCharacterRight': LazyCommand.create('EditorText', Imports.CursorCharacterRight, 'editorCursorCharacterRight'),\n 'Editor.cursorDown': LazyCommand.create('EditorText', Imports.CursorDown, 'editorCursorDown'),\n 'Editor.cursorEnd': LazyCommand.create('EditorText', Imports.CursorEnd, 'editorCursorEnd'),\n 'Editor.cursorHome': LazyCommand.create('EditorText', Imports.CursorHome, 'editorCursorsHome'),\n 'Editor.cursorLeft': LazyCommand.create('EditorText', Imports.CursorCharacterLeft, 'editorCursorCharacterLeft'),\n 'Editor.cursorRight': LazyCommand.create('EditorText', Imports.CursorCharacterRight, 'editorCursorCharacterRight'),\n 'Editor.cursorSet': LazyCommand.create('EditorText', Imports.CursorSet, 'editorCursorSet') ,\n 'Editor.cursorUp': LazyCommand.create('EditorText', Imports.CursorUp, 'editorCursorsUp'),\n 'Editor.cursorWordLeft': LazyCommand.create('EditorText', Imports.CursorWordLeft, 'editorCursorWordLeft'),\n 'Editor.cursorWordPartLeft': LazyCommand.create('EditorText', Imports.CursorWordPartLeft,'editorCursorWordPartLeft'),\n 'Editor.cursorWordPartRight': LazyCommand.create('EditorText', Imports.CursorWordPartRight, 'editorCursorWordPartRight'),\n 'Editor.cursorWordRight': LazyCommand.create('EditorText', Imports.CursorWordRight, 'editorCursorWordRight'),\n 'Editor.cut': LazyCommand.create('EditorText', Imports.Cut, 'editorCut'),\n 'Editor.deleteAllLeft': LazyCommand.create('EditorText', Imports.DeleteAllLeft, 'editorDeleteAllLeft'),\n 'Editor.deleteAllRight': LazyCommand.create('EditorText', Imports.DeleteAllRight, 'editorDeleteAllRight'),\n 'Editor.deleteLeft': LazyCommand.create('EditorText', Imports.DeleteLeft, 'editorDeleteCharacterLeft'),\n 'Editor.deleteRight': LazyCommand.create('EditorText', Imports.DeleteRight, 'editorDeleteCharacterRight'),\n 'Editor.deleteWordLeft': LazyCommand.create('EditorText', Imports.DeleteWordLeft, 'editorDeleteWordLeft'),\n 'Editor.deleteWordPartLeft': LazyCommand.create('EditorText', Imports.DeleteWordPartLeft, 'editorDeleteWordPartLeft'),\n 'Editor.deleteWordPartRight': LazyCommand.create('EditorText', Imports.DeleteWordPartRight, 'editorDeleteWordPartRight'),\n 'Editor.deleteWordRight': LazyCommand.create('EditorText', Imports.DeleteWordRight, 'editorDeleteWordRight'),\n 'Editor.format': LazyCommand.create('EditorText', Imports.Format, 'editorFormat'),\n 'Editor.goToDefinition': LazyCommand.create('EditorText', Imports.GoToDefinition, 'editorGoToDefinition'),\n 'Editor.goToTypeDefinition': LazyCommand.create('EditorText', Imports.GoToTypeDefinition, 'editorGoToTypeDefinition'),\n 'Editor.handleBeforeInputFromContentEditable': LazyCommand.create('EditorText', Imports.HandleBeforeInputFromContentEditable, 'handleBeforeInputFromContentEditable'),\n 'Editor.handleContextMenu': LazyCommand.create('EditorText', Imports.ContextMenu, 'editorHandleContextMenu'),\n 'Editor.handleDoubleClick': LazyCommand.create('EditorText', Imports.HandleDoubleClick, 'editorHandleDoubleClick'),\n 'Editor.handleMouseMove': LazyCommand.create('EditorText', Imports.HandleMouseMove, 'editorHandleMouseMove'),\n 'Editor.handleMouseMoveWithAltKey': LazyCommand.create('EditorText', Imports.HandleMouseMoveWithAltKey, 'editorHandleMouseMoveWithAltKey'),\n 'Editor.handleNativeSelectionChange': LazyCommand.create('EditorText', Imports.HandleNativeSelectionChange, 'editorHandleNativeSelectionChange'),\n 'Editor.handleScrollBarClick': LazyCommand.create('EditorText', Imports.HandleScrollBarClick, 'editorHandleScrollBarClick'),\n 'Editor.handleScrollBarMove': LazyCommand.create('EditorText', Imports.HandleScrollBarMove, 'editorHandleScrollBarMove'),\n 'Editor.handleSingleClick': LazyCommand.create('EditorText', Imports.HandleSingleClick, 'editorHandleSingleClick'),\n 'Editor.handleTab': LazyCommand.create('EditorText', Imports.HandleTab, 'editorHandleTab'),\n 'Editor.handleTouchEnd': LazyCommand.create('EditorText', Imports.HandleTouchEnd, 'editorHandleTouchEnd'),\n 'Editor.handleTouchMove': LazyCommand.create('EditorText', Imports.HandleTouchMove, 'editorHandleTouchMove'),\n 'Editor.handleTouchStart': LazyCommand.create('EditorText', Imports.HandleTouchStart, 'editorHandleTouchstart'),\n 'Editor.handleTripleClick': LazyCommand.create('EditorText', Imports.HandleTripleClick, 'editorHandleTripleClick'),\n 'Editor.indentLess': LazyCommand.create('EditorText', Imports.IndentLess, 'editorIndentLess'),\n 'Editor.indentMore': LazyCommand.create('EditorText', Imports.IndentMore, 'editorIndentMore'),\n 'Editor.insertLineBreak': LazyCommand.create('EditorText', Imports.InsertLineBreak, 'editorInsertLineBreak'),\n 'Editor.moveLineDown': LazyCommand.create('EditorText', Imports.MoveLineDown, 'editorMoveLineDown'),\n 'Editor.moveLineUp': LazyCommand.create('EditorText', Imports.MoveLineUp, 'editorMoveLineUp'),\n 'Editor.moveRectangleSelection': LazyCommand.create('EditorText', Imports.MoveRectangleSelection, 'editorMoveRectangleSelection'),\n 'Editor.moveRectangleSelectionPx': LazyCommand.create('EditorText', Imports.MoveRectangleSelectionPx, 'editorMoveRectangleSelectionPx'),\n 'Editor.moveSelection': LazyCommand.create('EditorText', Imports.MoveSelection, 'editorMoveSelection'),\n 'Editor.moveSelectionPx': LazyCommand.create('EditorText', Imports.MoveSelectionPx, 'editorMoveSelectionPx'),\n 'Editor.openCompletion': LazyCommand.create('EditorText', Imports.EditorCompletion, 'open'),\n 'Editor.openCompletionFromType': LazyCommand.create('EditorText', Imports.EditorCompletion, 'openFromType'),\n 'Editor.paste': LazyCommand.create('EditorText', Imports.Paste, 'editorPaste'),\n 'Editor.pasteText': LazyCommand.create('EditorText', Imports.PasteText, 'editorPasteText'),\n 'Editor.save': LazyCommand.create('EditorText', Imports.Save, 'editorSave'),\n 'Editor.selectAll': LazyCommand.create('EditorText', Imports.SelectAll, 'editorSelectAll'),\n 'Editor.selectAllOccurrences': LazyCommand.create('EditorText', Imports.SelectAllOccurrences, 'editorSelectAllOccurrences'),\n 'Editor.selectCharacterLeft': LazyCommand.create('EditorText', Imports.SelectCharacterLeft, 'editorSelectCharacterLeft'),\n 'Editor.selectCharacterRight': LazyCommand.create('EditorText', Imports.SelectCharacterRight, 'editorSelectCharacterRight'),\n 'Editor.selectDown': LazyCommand.create('EditorText', Imports.SelectDown, 'selectDown'),\n 'Editor.selectInsideString': LazyCommand.create('EditorText', Imports.SelectInsideString, 'editorSelectInsideString'),\n 'Editor.selectLine': LazyCommand.create('EditorText', Imports.SelectLine, 'editorSelectLine'),\n 'Editor.selectNextOccurrence': LazyCommand.create('EditorText', Imports.SelectNextOccurrence, 'editorSelectNextOccurrence'),\n 'Editor.selectUp': LazyCommand.create('EditorText', Imports.SelectUp, 'selectUp'),\n 'Editor.selectWord': LazyCommand.create('EditorText', Imports.SelectWord, 'editorSelectWord'),\n 'Editor.selectWordLeft': LazyCommand.create('EditorText', Imports.SelectWordLeft, 'editorSelectWordLeft'),\n 'Editor.selectWordRight': LazyCommand.create('EditorText', Imports.SelectWordRight, 'editorSelectWordRight'),\n 'Editor.setDecorations': LazyCommand.create('EditorText', Imports.SetDecorations, 'setDecorations'),\n 'Editor.setDeltaY': LazyCommand.create('EditorText', Imports.SetDeltaY, 'editorSetDeltaY'),\n 'Editor.setLanguageId': LazyCommand.create('EditorText', Imports.SetLanguageId, 'setLanguageId'),\n 'Editor.sortLinesAscending': LazyCommand.create('EditorText', Imports.SortLinesAscending, 'sortLinesAscending'),\n 'Editor.tabCompletion': LazyCommand.create('EditorText', Imports.TabCompletion, 'editorTabCompletion'),\n 'Editor.toggleBlockComment': LazyCommand.create('EditorText', Imports.ToggleBlockComment, 'editorToggleBlockComment'),\n 'Editor.toggleComment': LazyCommand.create('EditorText', Imports.ToggleComment, 'editorToggleComment'),\n 'Editor.type': LazyCommand.create('EditorText', Imports.Type, 'editorType'),\n 'Editor.undo': LazyCommand.create('EditorText', Imports.Undo, 'editorUndo'),\n 'Editor.unindent': LazyCommand.create('EditorText', Imports.UnIndent, 'selectUp'),\n}\n\nexport * from './ViewletEditorText.js'\n", "import * as FileSystem from '../FileSystem/FileSystem.js'\n\nexport const name = 'PlainText'\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n content: 'abc',\n uri,\n disposed: false,\n }\n}\n\nexport const loadContent = async (state) => {\n const content = await FileSystem.readFile(state.uri)\n return {\n ...state,\n content,\n }\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderContent = {\n isEqual(oldState, newState) {\n return oldState.content === newState.content\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'EditorPlainText',\n /* method */ 'setContent',\n /* content */ newState.content,\n ]\n },\n}\n\nexport const render = [renderContent]\n", "export const Commands = {}\n\nexport * from './ViewletEditorPlainText.js'\n", "export const name = 'EditorImage'\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n src: '',\n disposed: false,\n }\n}\n\nexport const loadContent = async (state) => {\n return {\n ...state,\n src: 'abc',\n }\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderSrc = {\n isEqual(oldState, newState) {\n return oldState.src === newState.src\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'EditorImage',\n /* method */ 'setSrc',\n /* src */ `/remote${newState.src}`,\n ]\n },\n}\n\nexport const render = [renderSrc]\n", "export const Commands = {}\n\nexport * from './ViewletEditorImage.js'\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const name = 'Clock'\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n id,\n interval: -1,\n disposed: false,\n }\n}\n\nexport const loadContent = (state) => {\n const update = async () => {\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ state.id,\n /* method */ 'setTime',\n /* time */ Date.now()\n )\n }\n return {\n ...state,\n interval: setInterval(update, 1000),\n }\n}\n\n// TODO use contentLoadedEffects\n\nexport const contentLoaded = async (state) => {}\n\nexport const dispose = (state) => {\n clearInterval(state.interval)\n state.interval = -1\n state.disposed = true\n}\n", "export const Commands = {}\n\nexport * from './ViewletClock.js'\n", "export const Tab = 1\n\nexport const Button = 2\n", "import * as ActivityBarItemFlags from '../ActivityBarItemFlags/ActvityBarItemFlags.js'\nimport * as Command from '../Command/Command.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\n/**\n * @enum {string}\n */\nconst UiStrings = {\n Explorer: 'Explorer',\n Search: 'Search',\n SourceControl: 'Source Control',\n RunAndDebug: 'Run and Debug',\n Extensions: 'Extensions',\n Settings: 'Settings',\n AdditionalViews: 'Additional Views',\n}\n\nexport const name = 'ActivityBar'\n\n// TODO rename viewlet parameter to something else (e.g. clicking settings opens context menu not settings viewlet)\n// TODO should just pass index\n// then if item is viewlet -> open viewlet\n// else if item is settings -> open settings\n\n// TODO this should be create\n// TODO unregister listeners when hidden\n\nconst getNumberOfVisibleItems = (state) => {\n const { height, itemHeight } = state\n const numberOfVisibleItemsTop = Math.floor(height / itemHeight)\n return numberOfVisibleItemsTop\n}\n\nexport const getHiddenItems = (state) => {\n const numberOfVisibleItems = getNumberOfVisibleItems(state)\n const items = state.activityBarItems\n if (numberOfVisibleItems >= items.length) {\n return []\n }\n return state.activityBarItems.slice(numberOfVisibleItems - 2, -1)\n}\n\nconst getVisibleActivityBarItems = (state) => {\n const numberOfVisibleItems = getNumberOfVisibleItems(state)\n const items = state.activityBarItems\n if (numberOfVisibleItems >= items.length) {\n return items\n }\n const showMoreItem = {\n id: 'Additional Views',\n title: I18nString.i18nString(UiStrings.AdditionalViews),\n icon: 'icons/ellipsis.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Button,\n keyShortCuts: '',\n }\n const visibleItems = [\n ...items.slice(0, numberOfVisibleItems - 2),\n showMoreItem,\n items.at(-1),\n ]\n return visibleItems\n}\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n // TODO declarative event api is good, but need to bind\n // listeners to state somehow\n // also the use of global event bus is not good\n // and this api is not strongly typed\n events: {\n 'SourceControl.changeBadgeCount': 8012,\n 'Layout.hideSideBar': 8014,\n 'SideBar.viewletChange': 8013,\n },\n activityBarItems: [],\n focusedIndex: -1,\n selectedIndex: -1,\n left,\n top,\n width,\n height,\n itemHeight: 48,\n }\n}\n\nconst getActivityBarItems = () => {\n return [\n // Top\n {\n id: 'Explorer',\n title: I18nString.i18nString(UiStrings.Explorer),\n icon: 'icons/files.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Tab,\n keyShortcuts: 'Control+Shift+E',\n },\n {\n id: 'Search',\n title: I18nString.i18nString(UiStrings.Search),\n icon: 'icons/search.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Tab,\n keyShortcuts: 'Control+Shift+F',\n },\n {\n id: 'Source Control',\n title: I18nString.i18nString(UiStrings.SourceControl),\n icon: 'icons/source-control.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Tab,\n keyShortcuts: 'Control+Shift+G',\n },\n {\n id: 'Run and Debug',\n title: I18nString.i18nString(UiStrings.RunAndDebug),\n icon: 'icons/debug-alt-2.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Tab,\n keyShortcuts: 'Control+Shift+D',\n },\n {\n id: 'Extensions',\n title: I18nString.i18nString(UiStrings.Extensions),\n icon: 'icons/extensions.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Tab,\n keyShortcuts: 'Control+Shift+X',\n },\n // Bottom\n {\n id: 'Settings',\n title: I18nString.i18nString(UiStrings.Settings),\n icon: 'icons/settings-gear.svg',\n enabled: true,\n flags: ActivityBarItemFlags.Button,\n keyShortcuts: '',\n },\n ]\n}\n\nexport const loadContent = async (state) => {\n const activityBarItems = getActivityBarItems()\n const sideBar = ViewletStates.getInstance('SideBar')\n const viewletId =\n sideBar && sideBar.state ? sideBar.state.currentViewletId : ''\n const selectedIndex = findIndex(activityBarItems, viewletId)\n return {\n ...state,\n selectedIndex,\n activityBarItems,\n }\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const contentLoadedEffects = (state) => {\n // TODO\n GlobalEventBus.addListener(\n 'SourceControl.changeBadgeCount',\n updateSourceControlCount\n )\n GlobalEventBus.addListener('Layout.hideSideBar', handleSideBarHidden)\n GlobalEventBus.addListener('SideBar.viewletChange', (id) =>\n handleSideBarViewletChange(state, id)\n )\n}\n\nexport const dispose = () => {\n GlobalEventBus.removeListener(\n 'SourceControl.changeBadgeCount',\n updateSourceControlCount\n )\n GlobalEventBus.removeListener('Layout.hideSideBar', handleSideBarHidden)\n GlobalEventBus.removeListener(\n 'SideBar.viewletChange',\n handleSideBarViewletChange\n )\n}\n\nconst findIndex = (activityBarItems, id) => {\n for (let i = 0; i < activityBarItems.length; i++) {\n if (activityBarItems[i].id === id) {\n return i\n }\n }\n return -1\n}\n\nexport const handleSideBarViewletChange = async (state, id, ...args) => {\n const index = findIndex(state.activityBarItems, id)\n const oldIndex = state.selectedIndex\n state.selectedIndex = index\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'selectIndex',\n /* oldIndex */ oldIndex,\n /* newIndex */ index\n )\n}\n\nexport const handleSideBarHidden = async (state) => {\n const oldIndex = state.focusedIndex\n state.focusedIndex = -1\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'selectIndex',\n /* oldIndex */ oldIndex,\n /* newIndex */ -1\n )\n}\n\nexport const updateSourceControlCount = async (state, count) => {\n if (count === 0) {\n return\n }\n const index = state.activityBarItems.findIndex(\n (item) => item.id === 'Source Control'\n )\n if (index === -1) {\n return\n }\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'setBadgeCount',\n /* index */ index,\n /* count */ count\n )\n\n // TODO send count to renderer process (if activity bar is visible)\n}\n\nexport const toggleItem = (context, item) => {\n // const item = activityBarFindItem(id)\n}\n\nconst isEnabled = (activityBarItem) => {\n return activityBarItem.enabled\n}\n\nexport const toggleActivityBarItem = async (state, item) => {\n const activityBarItem = state.activityBarItems.find(\n (activityBarItem) => activityBarItem.id === item.label\n )\n activityBarItem.enabled = !activityBarItem.enabled\n await RendererProcess.invoke(\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'setItems',\n /* items */ state.activityBarItems.filter(isEnabled),\n /* index */ state.selectedIndex\n )\n}\n\nexport const handleContextMenu = async (state, x, y) => {\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'activityBar'\n )\n return state\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n return {\n ...state,\n ...dimensions,\n }\n}\n\nconst renderActivityBarItems = {\n isEqual(oldState, newState) {\n return (\n oldState.activityBarItems === newState.activityBarItems &&\n oldState.height === newState.height\n )\n },\n apply(oldState, newState) {\n const visibleItems = getVisibleActivityBarItems(newState)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'setItems',\n /* items */ visibleItems,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return oldState.focusedIndex === newState.focusedIndex\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'ActivityBar',\n /* method */ 'setFocusedIndex',\n /* unFocusIndex */ oldState.focusedIndex,\n /* focusIndex */ newState.focusedIndex,\n ]\n },\n}\n\nexport const render = [renderActivityBarItems, renderFocusedIndex]\n\nexport const hasFunctionalRender = true\n", "export const focusIndex = (state, index) => {\n return {\n ...state,\n focusedIndex: index,\n }\n}\n", "import { focusIndex } from './ViewletActivityBarFocusIndex.js'\n\nexport const focus = (state) => {\n const indexToFocus = state.focusedIndex === -1 ? 0 : state.focusedIndex\n return focusIndex(state, indexToFocus)\n}\n", "import { focusIndex } from './ViewletActivityBarFocusIndex.js'\n\nexport const focusFirst = (state) => {\n return focusIndex(state, 0)\n}\n", "import { focusIndex } from './ViewletActivityBarFocusIndex.js'\n\nexport const focusLast = (state) => {\n return focusIndex(state, state.activityBarItems.length - 1)\n}\n", "import { focusIndex } from './ViewletActivityBarFocusIndex.js'\n\nexport const focusNext = (state) => {\n // TODO can never be -1 -> always set when sidebar changes\n if (state.focusedIndex === state.activityBarItems.length - 1) {\n return state\n }\n return focusIndex(state, state.focusedIndex + 1)\n}\n", "import { focusIndex } from './ViewletActivityBarFocusIndex.js'\n\nexport const focusPrevious = (state) => {\n if (state.focusedIndex === 0) {\n return state\n }\n return focusIndex(state, state.focusedIndex - 1)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Layout from '../Layout/Layout.js'\n\nconst handleClickSettings = async (state, x, y, viewletId) => {\n console.log('is settings')\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'settings'\n )\n return state\n}\n\nconst handleClickAdditionalViews = async (state, x, y, viewletId) => {\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'activity-bar-additional-views'\n )\n return state\n}\n\nconst handleClickOther = async (state, x, y, viewletId) => {\n if (Layout.isSideBarVisible()) {\n await Command.execute(\n /* SideBar.showOrHideViewlet */ 'SideBar.showOrHideViewlet',\n /* id */ viewletId\n )\n } else {\n // TODO should show side bar with viewletId\n await Layout.showSideBar()\n }\n return state\n}\n\nexport const handleClick = async (state, index, x, y) => {\n const viewletId = state.activityBarItems[index].id\n switch (viewletId) {\n case 'Settings':\n return handleClickSettings(state, x, y, viewletId)\n case 'Additional Views':\n return handleClickAdditionalViews(state, x, y, viewletId)\n default:\n return handleClickOther(state, x, y, viewletId)\n }\n}\n", "import { handleClick } from './ViewletActivityBarHandleClick.js'\n\nconst getPosition = (state, index) => {\n const { activityBarItems, top, left, height, itemHeight } = state\n if (index > activityBarItems.length - 2) {\n // at bottom\n return {\n x: left,\n y: top + height - (activityBarItems.length - 1 - index) * itemHeight,\n }\n }\n // at top\n return {\n x: left,\n y: top + index * itemHeight,\n }\n}\n\nexport const selectCurrent = async (state) => {\n if (state.focusedIndex === -1) {\n return\n }\n const position = getPosition(state, state.focusedIndex)\n await handleClick(state, state.focusedIndex, position.x, position.y)\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ActivityBar from './ViewletActivityBar.js'\nimport * as LazyCommand from '../LazyCommand/LazyCommand.js'\n\nconst Imports = {\n Focus: () => import('./ViewletActivityBarFocus.js'),\n FocusFirst: () => import('./ViewletActivityBarFocusFirst.js'),\n FocusIndex: () => import('./ViewletActivityBarFocusIndex.js'),\n FocusLast: () => import('./ViewletActivityBarFocusLast.js'),\n FocusNext: () => import('./ViewletActivityBarFocusNext.js'),\n FocusPrevious: () => import('./ViewletActivityBarFocusPrevious.js'),\n SelectCurrent: () => import('./ViewletActivityBarSelectCurrent.js'),\n HandleClick: () => import('./ViewletActivityBarHandleClick.js'),\n}\n\n// prettier-ignore\nexport const Commands = {\n 'ActivityBar.focus': LazyCommand.create('ActivityBar', Imports.Focus, 'focus'),\n 'ActivityBar.focusFirst': LazyCommand.create('ActivityBar', Imports.FocusFirst, 'focusFirst'),\n 'ActivityBar.focusLast': LazyCommand.create('ActivityBar', Imports.FocusLast, 'focusLast'),\n 'ActivityBar.focusNext': LazyCommand.create('ActivityBar', Imports.FocusNext, 'focusNext'),\n 'ActivityBar.focusPrevious': LazyCommand.create('ActivityBar', Imports.FocusPrevious, 'focusPrevious'),\n 'ActivityBar.getHiddenItems': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.getHiddenItems),\n 'ActivityBar.handleClick': LazyCommand.create('ActivityBar', Imports.HandleClick, 'handleClick'),\n 'ActivityBar.handleContextMenu': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.handleContextMenu),\n 'ActivityBar.handleSideBarHidden': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.handleSideBarHidden),\n 'ActivityBar.handleSideBarViewletChange': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.handleSideBarViewletChange),\n 'ActivityBar.selectCurrent': LazyCommand.create('ActivityBar',Imports.SelectCurrent, 'selectCurrent'),\n 'ActivityBar.toggleItem': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.toggleItem),\n 'ActivityBar.updateSourceControlCount': Viewlet.wrapViewletCommand('ActivityBar', ActivityBar.updateSourceControlCount),\n}\n\nexport * from './ViewletActivityBar.js'\n", "import * as Command from '../Command/Command.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n\nexport const name = 'Panel'\n\nexport const create = () => {\n return {\n currentId: '',\n currentViewlet: undefined,\n views: [],\n disposed: false,\n focusedIndex: -1,\n selectedIndex: -1,\n }\n}\n\nexport const loadContent = async (state) => {\n const cachedViewlet = await getCachedViewlet()\n return {\n ...state,\n views: ['Problems', 'Output', 'Debug Console', 'Terminal'],\n currentViewlet: cachedViewlet,\n selectedIndex: 0,\n }\n}\n\nexport const contentLoaded = async (state) => {\n // await RendererProcess.invoke(\n // /* Viewlet.send */ 'Viewlet.send',\n // /* id */ 'Panel',\n // /* method */ 'setTabs',\n // /* tabs */ state.views\n // )\n // await openViewlet(state, state.currentViewlet)\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nconst getCachedViewlet = async () => {\n const cachedViewlet = await Command.execute(\n /* LocalStorage.getJson */ 'LocalStorage.getJson',\n /* key */ 'panelViewlet'\n )\n return cachedViewlet\n}\n\n// TODO this function is a bit messy\nexport const openViewlet = async (state, id) => {\n if (!id) {\n return\n }\n // TODO pending state\n if (state.currentId === id) {\n return\n }\n // TODO current viewlet should be disposed if it exists\n state.currentId = id\n const child = ViewletManager.create(\n ViewletModule.load,\n id,\n 'Panel',\n '',\n 0,\n 0,\n 0,\n 0\n )\n await ViewletManager.load(child)\n}\n\nexport const selectIndex = async (state, index) => {\n console.log({ index })\n await openViewlet(state, state.views[index])\n return {\n ...state,\n selectedIndex: index,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderTabs = {\n isEqual(oldState, newState) {\n return oldState.views === newState.views\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Panel',\n /* method */ 'setTabs',\n /* tabs */ newState.views,\n ]\n },\n}\n\nconst renderSelectedIndex = {\n isEqual(oldState, newState) {\n return oldState.selectedIndex === newState.selectedIndex\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Panel',\n /* method */ 'setSelectedIndex',\n /* unFocusIndex */ oldState.selectedIndex,\n /* focusIndex */ newState.selectedIndex,\n ]\n },\n}\n\nexport const render = [renderTabs, renderSelectedIndex]\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n return state\n}\n", "import * as ViewletPanel from '../ViewletPanel/ViewletPanel.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Panel.selectIndex': Viewlet.wrapViewletCommand('Panel', ViewletPanel.selectIndex)\n}\n\nexport * from './ViewletPanel.js'\n", "export const state = {\n listenerMap: Object.create(null),\n phase: 0,\n}\n\nexport const Phase = {\n Zero: 0,\n One: 1,\n Two: 2,\n Three: 3,\n Four: 4,\n Five: 5,\n Six: 6,\n Seven: 7,\n Eight: 8,\n Nine: 9,\n Ten: 10,\n Eleven: 11,\n Twelve: 12,\n Thirteen: 13,\n Fourteen: 14,\n Fifteen: 15,\n Sixteen: 16,\n SevenTeen: 17,\n}\n\nexport const once = (event, listener) => {\n if (state.phase >= event) {\n listener()\n } else {\n // TODO could also statically allocate listenermap at start as array[13]\n state.listenerMap[event] ||= []\n state.listenerMap[event].push(listener)\n }\n}\n\nexport const mark = (event) => {\n const listeners = state.listenerMap[event] || []\n for (const listener of listeners) {\n listener()\n }\n state.phase = event\n if (event === Phase.Twelve) {\n state.listenerMap = Object.create(null)\n }\n}\n", "import * as Command from '../Command/Command.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Layout from '../Layout/Layout.js'\nimport * as LifeCycle from '../LifeCycle/LifeCycle.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n currentViewletId: '',\n left,\n top,\n width,\n height,\n }\n}\n\nexport const loadContent = async (state) => {\n const currentViewletId = await getSideBarViewlet()\n return {\n ...state,\n currentViewletId,\n }\n}\n\nexport const loadContentEffects = () => {\n LifeCycle.once(LifeCycle.PHASE_TWELVE, hydrateLazy)\n GlobalEventBus.addListener('Layout.hideSideBar', handleSideBarClose)\n}\n\nexport const contentLoaded = async (state) => {\n if (state.currentViewletId) {\n await openViewlet(state, state.currentViewletId)\n }\n}\n\nconst getSideBarViewlet = async () => {\n const cachedViewlet = await Command.execute(\n /* LocalStorage.getJson */ 'LocalStorage.getJson',\n /* key */ 'sideBarPanel'\n )\n if (cachedViewlet) {\n return cachedViewlet\n }\n\n // TODO what if explorer has been deactivated\n // probably need to check activity bar items\n // but activity bar already has a dependency on sidebar\n return 'Explorer'\n}\n\nconst hydrateLazy = () => () => {\n // TODO update file icons in explorer\n}\n\nconst SIDE_BAR_TITLE_AREA_HEIGHT = 35\n\n// TODO add test for this\nexport const showOrHideViewlet = async (state, viewletId) => {\n Assert.object(state)\n Assert.string(viewletId)\n if (Layout.isSideBarVisible()) {\n // TODO don't depend on sidebar directly\n if (state.currentViewletId === viewletId) {\n await Layout.hideSideBar()\n } else {\n state.currentViewletId = viewletId\n await openViewlet(state, viewletId)\n }\n } else {\n console.log('show side bar')\n state.currentViewletId = viewletId\n // TODO race condition: what if sidebar should be hidden again\n // while sidebar is opening?\n await Layout.showSideBar()\n }\n}\n\nconst getContentDimensions = (dimensions) => {\n return {\n left: dimensions.left,\n top: dimensions.top + SIDE_BAR_TITLE_AREA_HEIGHT,\n width: dimensions.width,\n height: dimensions.height - SIDE_BAR_TITLE_AREA_HEIGHT,\n }\n}\n\n// TODO no default parameter -> monomorphism\nexport const openViewlet = async (state, id, focus = false) => {\n console.assert(typeof id === 'string')\n // if (state.currentViewletId) {\n // console.log('dispose current viewlet', state.currentViewletId)\n // Viewlet.dispose(state.currentViewletId)\n // }\n // state.currentViewletId = id\n const childDimensions = getContentDimensions(state)\n // TODO race condition (check if disposed after created)\n const viewlet = ViewletManager.create(\n ViewletModule.load,\n id,\n 'SideBar',\n 'builtin://',\n childDimensions.left,\n childDimensions.top,\n childDimensions.width,\n childDimensions.height\n )\n\n // if (state.currentViewletId !== id) {\n // console.log('return')\n\n // return\n // }\n // // TODO activity and sidebar changes should ideally be rendered at the same time\n // // but this works for now\n // RendererProcess.send([\n // /* Viewlet.appendViewlet */ 3029,\n // /* parentId */ 'SideBar',\n // /* childId */ id,\n // /* focus */ focus,\n // ])\n GlobalEventBus.emitEvent('SideBar.viewletChange', id)\n // await Viewlet.refresh(id)\n // TODO add keybinding to title\n // @ts-ignore\n await ViewletManager.load(viewlet, focus)\n}\n\nconst handleSideBarClose = (state) => {\n state.currentViewletId = ''\n}\n\nexport const dispose = (state) => {\n // state.currentViewletId = undefined\n}\n\nexport const openDefaultViewlet = async (state) => {\n await openViewlet(state, 'Explorer')\n}\n\nexport const close = (state) => {\n if (state.currentViewletId) {\n Viewlet.dispose(state.currentViewletId)\n }\n state.currentViewletId = undefined\n // RendererProcess.send([/* sideBarHide */ 5552, /* id */ id])\n}\n\nexport const resize = (state, dimensions) => {\n const childDimensions = getContentDimensions(dimensions)\n const commands = Viewlet.resize(state.currentViewletId, childDimensions)\n return {\n newState: {\n ...state,\n ...dimensions,\n },\n commands,\n }\n}\n\nexport const focus = async (state) => {\n const { currentViewletId } = state\n const currentViewlet = ViewletStates.getInstance(currentViewletId)\n if (!currentViewlet) {\n return state\n }\n await Command.execute(`${currentViewletId}.focus`)\n // if (!currentViewlet.factory.focus) {\n // throw new Error(`missing focus function for ${currentViewletId}`)\n // }\n // const newState = currentViewlet.factory.focus(currentViewlet.state)\n // const commands = ViewletManager.render(\n // currentViewlet.factory,\n // currentViewlet.state,\n // newState\n // )\n // currentViewlet.state = newState\n // console.log({ commands })\n return state\n // console.log({ currentViewletId })\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletSideBar from './ViewletSideBar.js'\n\n// prettier-ignore\nexport const Commands = {\n 'SideBar.focus': Viewlet.wrapViewletCommand('SideBar', ViewletSideBar.focus),\n 'SideBar.openViewlet': Viewlet.wrapViewletCommand('SideBar', ViewletSideBar.openViewlet),\n 'SideBar.show': Viewlet.wrapViewletCommand('SideBar', ViewletSideBar.openViewlet),\n 'SideBar.showOrHideViewlet': Viewlet.wrapViewletCommand('SideBar', ViewletSideBar.showOrHideViewlet),\n}\n\nexport * from './ViewletSideBar.js'\n", "export const Separator = 1\n\nexport const None = 0\n\nexport const SubMenu = 4\n\nexport const Checked = 2\n\nexport const Unchecked = 3\n\nexport const Disabled = 5\n\nexport const RestoreFocus = 6\n", "import * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n Seperator: 'Separator',\n MoveSideBarLeft: 'Move Side Bar Left',\n HideActivityBar: 'Hide Activity Bar',\n}\n\nconst toContextMenuItem = (activityBarItem) => {\n return {\n label: activityBarItem.id,\n id: 8000, // TODO\n flags: activityBarItem.enabled\n ? MenuItemFlags.Checked\n : MenuItemFlags.Unchecked,\n }\n}\n\nexport const getMenuEntries = async () => {\n const activityBarItems =\n ViewletStates.getState('ActivityBar').activityBarItems\n return [\n ...activityBarItems.map(toContextMenuItem),\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Seperator),\n flags: MenuItemFlags.Separator,\n },\n {\n id: 'moveSideBarLeft',\n label: I18nString.i18nString(UiStrings.MoveSideBarLeft), // TODO should be dynamic\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n {\n id: 'hideActivityBar',\n label: I18nString.i18nString(UiStrings.HideActivityBar),\n flags: MenuItemFlags.None,\n command: /* Layout.hideActivityBar */ 'Layout.hideActivityBar',\n },\n ]\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n Undo: 'Undo',\n Redo: 'Redo',\n Separator: 'Separator',\n Cut: 'Cut',\n Copy: 'Copy',\n Paste: 'Paste',\n ToggleLineComment: 'Toggle Line Comment',\n ToggleBlockComment: 'Toggle Block Comment',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'undo',\n label: I18nString.i18nString(UiStrings.Undo),\n flags: MenuItemFlags.Disabled,\n command: /* TODO */ -1,\n },\n {\n id: 'redo',\n label: I18nString.i18nString(UiStrings.Redo),\n flags: MenuItemFlags.Disabled,\n command: /* TODO */ -1,\n },\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: /* TODO */ -1,\n },\n {\n id: 'cut',\n label: I18nString.i18nString(UiStrings.Cut),\n flags: MenuItemFlags.None,\n command: /* Editor.cut */ 'Editor.cut',\n },\n {\n id: 'copy',\n label: I18nString.i18nString(UiStrings.Copy),\n flags: MenuItemFlags.None,\n command: /* Editor.copy */ 'Editor.copy',\n },\n {\n id: 'paste',\n label: I18nString.i18nString(UiStrings.Paste),\n flags: MenuItemFlags.None,\n command: /* Editor.paste */ 'Editor.paste',\n },\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: /* TODO */ -1,\n },\n {\n id: 'toggle-line-comment',\n label: I18nString.i18nString(UiStrings.ToggleLineComment),\n flags: MenuItemFlags.None,\n command: /* Editor.toggleLineComment */ 'Editor.toggleLineComment',\n },\n {\n id: 'toggle-block-comment',\n label: I18nString.i18nString(UiStrings.ToggleBlockComment),\n flags: MenuItemFlags.None,\n command: /* Editor.toggleBlockComment */ 'Editor.toggleBlockComment',\n },\n ]\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n GoToTypeDefinition: 'Go To Type Definition',\n FindAllReferences: 'Find All References',\n FindAllImplementations: 'Find All Implementations',\n Cut: 'Cut',\n Copy: 'Copy',\n Paste: 'Paste',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'go-to-type-definition',\n label: I18nString.i18nString(UiStrings.GoToTypeDefinition),\n flags: MenuItemFlags.None,\n command: /* Editor.goToTypeDefinition */ 'Editor.goToTypeDefinition',\n },\n {\n id: 'find-all-references',\n label: I18nString.i18nString(UiStrings.FindAllReferences),\n flags: MenuItemFlags.None,\n command: /* ViewletSideBar.show */ 'SideBar.show',\n args: [/* id */ 'References', /* focus */ true],\n },\n {\n id: 'find-all-implementations',\n label: I18nString.i18nString(UiStrings.FindAllImplementations),\n flags: MenuItemFlags.None,\n command: /* ViewletSideBar.show */ 'SideBar.show',\n args: [/* id */ 'Implementations', /* focus */ true],\n },\n {\n id: 'cut',\n label: I18nString.i18nString(UiStrings.Cut),\n flags: MenuItemFlags.None,\n command: /* Editor.cut */ 'Editor.cut',\n },\n {\n id: 'copy',\n label: I18nString.i18nString(UiStrings.Copy),\n flags: MenuItemFlags.None,\n command: /* Editor.copy */ 'Editor.copy',\n },\n {\n id: 'paste',\n label: I18nString.i18nString(UiStrings.Paste),\n flags: MenuItemFlags.None,\n command: /* Editor.paste */ 'Editor.paste',\n },\n ]\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as DirentType from '../DirentType/DirentType.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n NewFile: 'New File',\n NewFolder: 'New Folder',\n OpenContainingFolder: 'Open Containing Folder',\n OpenInIntegratedTerminal: 'Open in integrated Terminal',\n Separator: 'Separator',\n Cut: 'Cut',\n Copy: 'Copy',\n Paste: 'Paste',\n CopyPath: 'Copy Path',\n CopyRelativePath: 'Copy Relative Path',\n Rename: 'Rename',\n Delete: 'Delete',\n}\n\nconst ALL_ENTRIES = [\n {\n id: 'newFile',\n label: I18nString.i18nString(UiStrings.NewFile),\n flags: MenuItemFlags.None,\n command: 'Explorer.newFile',\n },\n {\n id: 'newFolder',\n label: I18nString.i18nString(UiStrings.NewFolder),\n flags: MenuItemFlags.None,\n command: 'Explorer.newFolder',\n },\n {\n id: 'openContainingFolder',\n label: I18nString.i18nString(UiStrings.OpenContainingFolder),\n flags: MenuItemFlags.RestoreFocus,\n command: 'Explorer.openContainingFolder',\n },\n {\n id: 'openInIntegratedTerminal',\n label: I18nString.i18nString(UiStrings.OpenInIntegratedTerminal),\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n {\n id: '',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: /* TODO */ -1,\n },\n {\n id: 'cut',\n label: I18nString.i18nString(UiStrings.Cut),\n flags: MenuItemFlags.RestoreFocus,\n command: /* TODO */ -1,\n },\n {\n id: 'copy',\n label: I18nString.i18nString(UiStrings.Copy),\n flags: MenuItemFlags.RestoreFocus,\n command: 'Explorer.handleCopy',\n },\n {\n id: 'paste',\n label: I18nString.i18nString(UiStrings.Paste),\n flags: MenuItemFlags.None,\n command: 'Explorer.handlePaste',\n },\n {\n id: '',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: /* TODO */ -1,\n },\n {\n id: 'copyPath',\n label: I18nString.i18nString(UiStrings.CopyPath),\n flags: MenuItemFlags.RestoreFocus,\n command: 'Explorer.copyPath',\n },\n {\n id: 'copyRelativePath',\n label: I18nString.i18nString(UiStrings.CopyRelativePath),\n flags: MenuItemFlags.RestoreFocus,\n command: 'Explorer.copyRelativePath',\n },\n {\n id: '',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: /* TODO */ -1,\n },\n {\n id: 'rename',\n label: I18nString.i18nString(UiStrings.Rename),\n flags: MenuItemFlags.None,\n command: 'Explorer.renameDirent',\n },\n {\n id: 'delete',\n label: I18nString.i18nString(UiStrings.Delete),\n flags: MenuItemFlags.None,\n command: 'Explorer.removeDirent',\n },\n]\n\nconst isFileEntry = (entry) => {\n return entry.id !== 'newFile' && entry.id !== 'newFolder'\n}\n\n// TODO there are two possible ways of getting the focused dirent of explorer\n// 1. directly access state of explorer (bad because it directly accesses state of another component)\n// 2. expose getFocusedDirent method in explorer (bad because explorer code should not know about for menuEntriesExplorer, which needs that method)\nconst getFocusedDirent = () => {\n const explorerState = Viewlet.getState('Explorer')\n if (!explorerState || explorerState.focusedIndex < 0) {\n return undefined\n }\n return explorerState.dirents[explorerState.focusedIndex]\n}\n\nconst getMenuEntriesDirectory = () => {\n return ALL_ENTRIES\n}\nconst getMenuEntriesFile = () => {\n return ALL_ENTRIES.filter(isFileEntry)\n}\n\nconst getMenuEntriesDefault = () => {\n return ALL_ENTRIES\n}\n\nexport const getMenuEntries = () => {\n const focusedDirent = getFocusedDirent()\n if (!focusedDirent) {\n return ALL_ENTRIES\n }\n switch (focusedDirent.type) {\n case DirentType.Directory:\n return getMenuEntriesDirectory()\n case DirentType.File:\n return getMenuEntriesFile()\n default:\n return getMenuEntriesDefault()\n }\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n NewFile: 'New File',\n NewWindow: 'New Window',\n Separator: 'Separator',\n OpenFile: 'Open File',\n OpenFolder: 'Open Folder',\n OpenRecent: 'Open Recent',\n Exit: 'Exit',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'newFile',\n label: I18nString.i18nString(UiStrings.NewFile),\n flags: MenuItemFlags.None,\n command: -1,\n },\n {\n id: 'newWindow',\n label: I18nString.i18nString(UiStrings.NewWindow),\n flags: MenuItemFlags.None,\n command: /* Window.openNew */ 'Window.openNew',\n },\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: MenuItemFlags.None,\n },\n {\n id: 'openFile',\n label: I18nString.i18nString(UiStrings.OpenFile),\n flags: MenuItemFlags.None,\n command: 'Dialog.openFile',\n },\n {\n id: 'openFolder',\n label: I18nString.i18nString(UiStrings.OpenFolder),\n flags: MenuItemFlags.None,\n command: 'Dialog.openFolder',\n },\n {\n id: 'openRecent',\n label: I18nString.i18nString(UiStrings.OpenRecent),\n flags: MenuItemFlags.SubMenu,\n command: MenuItemFlags.None,\n },\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: MenuItemFlags.None,\n },\n {\n id: 'exit',\n label: I18nString.i18nString(UiStrings.Exit),\n flags: MenuItemFlags.None,\n command: /* Window.exit */ 'Window.exit',\n },\n ]\n}\n", "export const getMenuEntries = () => {\n return []\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n About: 'About',\n ToggleDeveloperTools: 'Toggle Developer Tools',\n OpenProcessExplorer: 'Open Process Explorer',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'toggleDeveloperTools',\n label: I18nString.i18nString(UiStrings.ToggleDeveloperTools),\n flags: MenuItemFlags.None,\n command: 'Developer.toggleDeveloperTools',\n },\n {\n id: 'openProcessExplorer',\n label: I18nString.i18nString(UiStrings.OpenProcessExplorer),\n flags: MenuItemFlags.None,\n command: 'Developer.openProcessExplorer',\n },\n {\n id: 'about',\n label: I18nString.i18nString(UiStrings.About),\n flags: MenuItemFlags.None,\n command: 'Dialog.showAbout',\n },\n ]\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n Enable: 'Enable',\n Disable: 'Disable',\n Uninstall: 'Uninstall',\n InstallAnotherVersion: 'Install Another Version',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'enable',\n label: I18nString.i18nString(UiStrings.Enable),\n flags: MenuItemFlags.None,\n command: -1,\n },\n {\n id: 'disable',\n label: I18nString.i18nString(UiStrings.Disable),\n flags: MenuItemFlags.None,\n command: -1,\n },\n {\n id: 'uninstall',\n label: I18nString.i18nString(UiStrings.Disable),\n flags: MenuItemFlags.None,\n command: -1,\n },\n {\n id: 'installAnotherVersion',\n label: I18nString.i18nString(UiStrings.InstallAnotherVersion),\n flags: MenuItemFlags.None,\n command: -1,\n },\n ]\n}\n", "import * as Command from '../Command/Command.js'\nimport * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n Separator: 'Separator',\n More: 'More ...',\n ClearRecentlyOpened: 'Clear Recently Opened',\n}\n\nconst MAX_MENU_RECENT_ENTRIES = 10\n\nconst toMenuItem = (folder) => {\n return {\n label: folder,\n flags: MenuItemFlags.None,\n command: /* Workspace.setPath */ 'Workspace.setPath',\n args: [folder],\n }\n}\n\nconst getRecentlyOpened = () => {\n return Command.execute(\n /* RecentlyOpened.getRecentlyOpened */ 'RecentlyOpened.getRecentlyOpened'\n )\n}\n\nexport const getMenuEntries = async () => {\n const allItems = await getRecentlyOpened()\n const itemsToShow = allItems.slice(0, MAX_MENU_RECENT_ENTRIES)\n return [\n ...itemsToShow.map(toMenuItem),\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.Separator),\n flags: MenuItemFlags.Separator,\n command: MenuItemFlags.None,\n },\n {\n id: 'more',\n label: I18nString.i18nString(UiStrings.More),\n flags: MenuItemFlags.None,\n command: /* TODO show quick picker with more recently opened */ -1,\n },\n {\n id: 'separator',\n label: I18nString.i18nString(UiStrings.More),\n flags: MenuItemFlags.Separator,\n command: MenuItemFlags.None,\n },\n {\n id: 'clearRecentlyOpened',\n label: I18nString.i18nString(UiStrings.ClearRecentlyOpened),\n flags: MenuItemFlags.None,\n command: 'RecentlyOpened.clearRecentlyOpened',\n },\n ]\n}\n", "export const getMenuEntries = () => {\n return []\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n SelectAll: 'Select All',\n CopyLineUp: 'Copy Line Up',\n CopyLineDown: 'Copy Line Down',\n MoveLineUp: 'Move Line Up',\n MoveLineDown: 'Move Line Down',\n DuplicateSelection: 'Duplicate Selection',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'selectAll',\n label: I18nString.i18nString(UiStrings.SelectAll),\n flags: MenuItemFlags.None,\n command: 'Editor.selectAll',\n },\n {\n id: 'copyLineUp',\n label: I18nString.i18nString(UiStrings.CopyLineUp),\n flags: MenuItemFlags.None,\n command: 'Editor.copyLineUp',\n },\n {\n id: 'copyLineDown',\n label: I18nString.i18nString(UiStrings.CopyLineDown),\n flags: MenuItemFlags.None,\n command: 'Editor.copyLineDown',\n },\n {\n id: 'moveLineUp',\n label: I18nString.i18nString(UiStrings.MoveLineUp),\n flags: MenuItemFlags.Disabled,\n command: 'Editor.moveLineUp',\n },\n {\n id: 'moveLineDown',\n label: I18nString.i18nString(UiStrings.MoveLineDown),\n flags: MenuItemFlags.Disabled,\n command: 'Editor.moveLineDown',\n },\n ]\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const UiStrings = {\n Settings: 'Settings',\n KeyboardShortcuts: 'Keyboard Shortcuts',\n ColorTheme: 'Color Theme',\n CheckForUpdates: 'Check For Updates',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'settings',\n label: I18nString.i18nString(UiStrings.Settings),\n flags: MenuItemFlags.None,\n command: 'Preferences.openSettingsJson',\n },\n {\n id: 'keyboardShortcuts',\n label: I18nString.i18nString(UiStrings.KeyboardShortcuts),\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n {\n id: 'colorTheme',\n label: I18nString.i18nString(UiStrings.ColorTheme),\n flags: MenuItemFlags.None,\n command: 'QuickPick.openColorTheme',\n },\n {\n id: 'checkForUpdates',\n label: I18nString.i18nString(UiStrings.CheckForUpdates),\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n ]\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\nconst UiStrings = {\n Close: 'Close',\n CloseOthers: 'Close Others',\n CloseToTheRight: 'Close To The Right',\n CloseAll: 'Close All',\n RevealInExplorer: 'Reveal in Explorer',\n}\n\n// TODO should pass tab uri as argument or tab index\nexport const getMenuEntries = () => {\n const mainState = ViewletStates.getState('Main')\n const editor = mainState.editors[mainState.focusedIndex]\n const uri = editor.uri\n return [\n {\n id: 'tabClose',\n label: I18nString.i18nString(UiStrings.Close),\n flags: MenuItemFlags.None,\n command: 'Main.closeFocusedTab',\n },\n {\n id: 'tabCloseOthers',\n label: I18nString.i18nString(UiStrings.CloseOthers),\n flags: MenuItemFlags.None,\n command: 'Main.closeOthers',\n },\n {\n id: 'tabCloseToTheRight',\n label: I18nString.i18nString(UiStrings.CloseToTheRight),\n flags: MenuItemFlags.None,\n command: 'Main.closeTabsToTheRight',\n },\n {\n id: 'tabCloseAll',\n label: I18nString.i18nString(UiStrings.CloseAll),\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n {\n id: 'revealInExplorer',\n label: I18nString.i18nString(UiStrings.RevealInExplorer),\n flags: MenuItemFlags.None,\n command: 'Explorer.revealItem',\n args: [uri],\n },\n ]\n}\n", "export const getMenuEntries = () => {\n return []\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nconst UiStrings = {\n File: 'File',\n Edit: 'Edit',\n Selection: 'Selection',\n View: 'View',\n Go: 'Go',\n Run: 'Run',\n Terminal: 'Terminal',\n Help: 'Help',\n}\n\nconst getMenuEntriesWeb = () => {\n return [\n {\n id: 'file',\n name: I18nString.i18nString(UiStrings.File),\n flags: MenuItemFlags.None,\n },\n {\n id: 'edit',\n name: I18nString.i18nString(UiStrings.Edit),\n flags: MenuItemFlags.None,\n },\n {\n id: 'selection',\n name: I18nString.i18nString(UiStrings.Selection),\n flags: MenuItemFlags.None,\n },\n {\n id: 'view',\n name: I18nString.i18nString(UiStrings.View),\n flags: MenuItemFlags.None,\n },\n {\n id: 'go',\n name: I18nString.i18nString(UiStrings.Go),\n flags: MenuItemFlags.None,\n },\n ]\n}\n\nconst getMenuEntriesRemote = () => {\n return [\n {\n id: 'file',\n name: I18nString.i18nString(UiStrings.File),\n flags: MenuItemFlags.None,\n },\n {\n id: 'edit',\n name: I18nString.i18nString(UiStrings.Edit),\n flags: MenuItemFlags.None,\n },\n {\n id: 'selection',\n name: I18nString.i18nString(UiStrings.Selection),\n flags: MenuItemFlags.None,\n },\n {\n id: 'view',\n name: I18nString.i18nString(UiStrings.View),\n flags: MenuItemFlags.None,\n },\n {\n id: 'go',\n name: I18nString.i18nString(UiStrings.Go),\n flags: MenuItemFlags.None,\n },\n {\n id: 'run',\n name: I18nString.i18nString(UiStrings.Run),\n keyboardShortCut: 'Alt+r',\n flags: MenuItemFlags.None,\n },\n {\n id: 'terminal',\n name: I18nString.i18nString(UiStrings.Terminal),\n keyboardShortCut: 'Alt+t',\n flags: MenuItemFlags.None,\n },\n {\n id: 'help',\n name: I18nString.i18nString(UiStrings.Help),\n keyboardShortCut: 'Alt+h',\n flags: MenuItemFlags.None,\n },\n ]\n}\n\nexport const getMenuEntries = () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return getMenuEntriesWeb()\n case PlatformType.Remote:\n case PlatformType.Electron:\n return getMenuEntriesRemote()\n default:\n return []\n }\n}\n", "export const getMenuEntries = () => {\n return []\n}\n", "import * as Command from '../Command/Command.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nconst toContextMenuItem = (activityBarItem) => {\n return {\n label: activityBarItem.id,\n id: 8000, // TODO\n flags: MenuItemFlags.None,\n command: -1,\n }\n}\n\nexport const getMenuEntries = async () => {\n const hiddenActivityBarItems = await Command.execute(\n /* ActivityBar.getHiddenItems */ 8011\n )\n return hiddenActivityBarItems.map(toContextMenuItem)\n}\n", "import * as I18nString from '../I18NString/I18NString.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\n/**\n * @enum {}\n */\nexport const UiStrings = {\n CopyPath: 'Copy Path',\n}\n\nexport const getMenuEntries = () => {\n return [\n {\n id: 'copyPath',\n label: I18nString.i18nString(UiStrings.CopyPath),\n flags: MenuItemFlags.None,\n command: /* TODO */ -1,\n },\n ]\n}\n", "const getModule = (id) => {\n switch (id) {\n case 'activityBar':\n return import('./MenuEntriesActivityBar.js')\n case 'edit':\n return import('./MenuEntriesEdit.js')\n case 'editor':\n return import('./MenuEntriesEditor.js')\n case 'explorer':\n return import('./MenuEntriesExplorer.js')\n case 'file':\n return import('./MenuEntriesFile.js')\n case 'go':\n return import('./MenuEntriesGo.js')\n case 'help':\n return import('./MenuEntriesHelp.js')\n case 'manageExtension':\n return import('./MenuEntriesManageExtension.js')\n case 'openRecent':\n return import('./MenuEntriesOpenRecent.js')\n case 'run':\n return import('./MenuEntriesRun.js')\n case 'selection':\n return import('./MenuEntriesSelection.js')\n case 'settings':\n return import('./MenuEntriesSettings.js')\n case 'tab':\n return import('./MenuEntriesTab.js')\n case 'terminal':\n return import('./MenuEntriesTerminal.js')\n case 'titleBar':\n return import('./MenuEntriesTitleBar.js')\n case 'view':\n return import('./MenuEntriesView.js')\n case 'activity-bar-additional-views':\n return import('./MenuEntriesActivityBarAdditionalViews.js')\n case 'search':\n return import('./MenuEntriesSearch.js')\n default:\n throw new Error(`module not found \"${id}\"`)\n }\n}\n\nexport const getMenuEntries = async (id) => {\n const module = await getModule(id)\n return module.getMenuEntries()\n}\n", "// TODO menu should not be needed initially, only when item is selected and menu is opened\nimport * as Menu from '../Menu/Menu.js'\nimport * as MenuEntries from '../MenuEntries/MenuEntries.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const state = {\n /**\n * @type{any[]}\n */\n titleBarEntries: [],\n focusedIndex: 0,\n isMenuOpen: false,\n}\n\n// TODO put this in json (e.g. defaultTitleBarMenu.json) and load from cache storage or via ajax\n// TODO only compute once if is electron and filter out during build process\n\nexport const getEntries = async () => {\n state.titleBarEntries = await MenuEntries.getMenuEntries('titleBar')\n return state.titleBarEntries\n}\n\n/**\n * @param {number} index\n * @param {boolean} shouldBeFocused\n */\nconst openMenuAtIndex = async (index, shouldBeFocused) => {\n // TODO race conditions\n // TODO send renderer process\n // 1. open menu, items to show\n // 2. focus menu\n const id = state.titleBarEntries[index].id\n const items = await MenuEntries.getMenuEntries(id)\n Menu.state.menus = []\n const bounds = await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'TitleBar',\n /* method */ 'menuGetEntryBounds',\n /* index */ index\n )\n // TODO race condition: another menu might already be open at this point\n\n const x = bounds.left\n const y = bounds.bottom\n const width = Menu.getMenuWidth()\n const height = Menu.getMenuHeight(items)\n const menuFocusedIndex = shouldBeFocused\n ? Menu.getIndexToFocusNextStartingAt(items, 0)\n : -1\n const menu = Menu.addMenuInternal({\n id,\n items,\n focusedIndex: menuFocusedIndex,\n level: Menu.state.menus.length,\n x,\n y,\n })\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'TitleBar',\n /* method */ 'menuOpen',\n /* unFocusIndex */ state.focusedIndex,\n /* index */ index,\n /* level */ menu.level,\n /* menuItems */ menu.items,\n /* menuFocusedIndex */ menuFocusedIndex,\n /* focus */ shouldBeFocused,\n /* x */ x,\n /* y */ y,\n /* width */ width,\n /* height */ height\n )\n state.isMenuOpen = true\n}\n\n/**\n * @param {boolean} focus\n */\nexport const openMenu = async (focus) => {\n if (state.focusedIndex === -1) {\n return\n }\n await openMenuAtIndex(state.focusedIndex, focus)\n}\n\nexport const closeMenu = async (keepFocus) => {\n // TODO send to renderer process\n // 1. close menu\n // 2. focus top level entry\n const focusIndex = keepFocus ? state.focusedIndex : -1\n // TODO use Viewlet.dispose instead\n state.isMenuOpen = false\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'TitleBar',\n /* method */ 'menuClose',\n /* unFocusIndex */ state.focusedIndex,\n /* focusIndex */ focusIndex\n )\n}\n\nexport const toggleMenu = async () => {\n if (state.isMenuOpen) {\n closeMenu(/* keepFocus */ true)\n } else {\n await openMenu(/* focus */ false)\n }\n}\n\nexport const focusIndex = async (index) => {\n if (state.isMenuOpen) {\n await openMenuAtIndex(index, /* focus */ false)\n } else {\n await RendererProcess.invoke(\n /* TitleBarMenuBar.focusIndex */ 1371,\n /* unFocusIndex */ state.focusedIndex,\n /* index */ index\n )\n }\n state.focusedIndex = index\n}\n\nexport const toggleIndex = async (index) => {\n if (state.isMenuOpen && state.focusedIndex === index) {\n closeMenu(/* keepFocus */ true)\n } else {\n await openMenuAtIndex(index, /* focus */ false)\n }\n state.focusedIndex = index\n}\n\nexport const focus = async () => {\n await focusFirst()\n}\n\nconst getIndexToFocusPreviousStartingAt = (items, index) => {\n return (index + items.length) % items.length\n}\n\nexport const focusPrevious = async () => {\n const indexToFocus = getIndexToFocusPreviousStartingAt(\n state.titleBarEntries,\n state.focusedIndex - 1\n )\n await focusIndex(indexToFocus)\n}\n\nconst getIndexToFocusNextStartingAt = (items, index) => {\n return index % items.length\n}\n\nexport const focusNext = async () => {\n const indexToFocus = getIndexToFocusNextStartingAt(\n state.titleBarEntries,\n state.focusedIndex + 1\n )\n await focusIndex(indexToFocus)\n}\n\nexport const focusFirst = async () => {\n const indexToFocus = getIndexToFocusNextStartingAt(state.titleBarEntries, 0)\n await focusIndex(indexToFocus)\n}\n\nexport const focusLast = async () => {\n const indexToFocus = getIndexToFocusPreviousStartingAt(\n state.titleBarEntries,\n state.titleBarEntries.length - 1\n )\n await focusIndex(indexToFocus)\n}\n\nexport const handleKeyArrowLeft = async () => {\n if (state.isMenuOpen && Menu.state.menus.length > 1) {\n return\n }\n // TODO menu collapse\n await focusPrevious()\n}\n\nexport const handleKeyArrowUp = () => {\n if (!state.isMenuOpen) {\n return\n }\n Menu.focusPrevious()\n}\n\nexport const handleKeyArrowRight = async () => {\n console.log('arrow right')\n if (state.isMenuOpen) {\n // if menu can open sub menu to the right -> do that\n const menu = Menu.state.menus.at(-1)\n const item = menu.items[menu.focusedIndex]\n if (item.flags === /* SubMenu */ 4) {\n await Menu.showSubMenu(Menu.state.menus.length - 1, menu.focusedIndex)\n return\n }\n }\n await focusNext()\n}\n\nexport const handleKeyHome = async () => {\n if (state.isMenuOpen) {\n Menu.focusFirst()\n } else {\n await focusFirst()\n }\n}\n\n// TODO this is also use for pagedown -> maybe find a better name for this function\nexport const handleKeyEnd = async () => {\n if (state.isMenuOpen) {\n Menu.focusLast()\n } else {\n await focusLast()\n }\n}\n\n// TODO this is same as handle key enter -> merge the functions\nexport const handleKeySpace = async () => {\n if (state.isMenuOpen) {\n await Menu.selectCurrent()\n } else {\n openMenu(/* focus */ true)\n }\n}\n\nexport const handleKeyEnter = async () => {\n if (state.isMenuOpen) {\n await Menu.selectCurrent()\n } else {\n openMenu(/* focus */ true)\n }\n}\n\nexport const handleKeyEscape = () => {\n if (!state.isMenuOpen) {\n return\n }\n closeMenu(/* keepFocus */ true)\n}\n\nexport const handleKeyArrowDown = async () => {\n if (state.isMenuOpen) {\n Menu.focusNext()\n } else {\n await openMenu(/* focus */ true)\n }\n}\n", "import * as TitleBarMenuBar from '../TitleBarMenuBar/TitleBarMenuBar.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const name = 'TitleBar'\n\nexport const create = () => {\n return {\n disposed: false,\n titleBarEntries: [],\n }\n}\n\nexport const loadContent = async (state) => {\n const titleBarEntries = await TitleBarMenuBar.getEntries()\n return {\n ...state,\n titleBarEntries,\n }\n}\n\nexport const contentLoaded = async (state) => {\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'TitleBar',\n /* method */ 'menuSetEntries',\n /* titleBarEntries */ state.titleBarEntries\n )\n}\n\nexport const focus = async () => {\n await TitleBarMenuBar.focus()\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const resize = (state, dimensions) => {\n return {\n newState: {\n ...state,\n ...dimensions,\n },\n commands: [],\n }\n}\n", "export const Commands = {}\n\nexport * from './ViewletTitleBar.js'\n", "import * as Id from '../Id/Id.js'\nimport * as Assert from '../Assert/Assert.js'\n\nexport const state = Object.create(null)\n\nexport const register = (listener) => {\n const id = Id.create()\n state[id] = listener\n return id\n}\n\nexport const execute = (id, ...args) => {\n Assert.number(id)\n const listener = state[id]\n if (!listener) {\n console.warn(`listener with id ${id} not found`)\n return\n }\n return listener(...args)\n}\n\nexport const unregister = (id) => {\n delete state[id]\n}\n", "import * as Listener from '../Listener/Listener.js'\nimport * as ExtensionHostShared from './ExtensionHostShared.js'\n\nexport const state = {\n changeListeners: [],\n}\n\nconst getStatusBarItemsFromExtension = (extension) => {\n if (!extension.statusBarItems) {\n return []\n }\n return extension.statusBarItems\n}\n\nconst getStatusBarItemsFromExtensions = (extensions) => {\n return extensions.flatMap(getStatusBarItemsFromExtension)\n}\n\nconst combineResults = (results) => {\n return []\n}\n\nexport const getStatusBarItems = () => {\n return ExtensionHostShared.executeProviders({\n event: 'onStatusBarItem',\n method: 'ExtensionHost.getStatusBarItems',\n params: [],\n noProviderFoundMessage: 'No status bar item provider found',\n noProviderFoundResult: [],\n combineResults,\n })\n}\n\n// TODO add function to dispose listener\nexport const onChange = (listener) => {\n const id = Listener.register(listener)\n return ExtensionHostShared.execute({\n method: 'ExtensionHostStatusBar.registerChangeListener',\n params: [id],\n })\n}\n", "import * as ExtensionHostStatusBarItems from '../ExtensionHost/ExtensionHostStatusBarItems.js'\n\nexport const name = 'Status Bar'\n\nexport const create = () => {\n return {\n statusBarItemsLeft: [],\n statusBarItemsRight: [],\n }\n}\n\nconst toUiStatusBarItem = (extensionHostStatusBarItem) => {\n return {\n name: extensionHostStatusBarItem.id,\n text: extensionHostStatusBarItem.id,\n tooltip: '',\n command: -1,\n icon: extensionHostStatusBarItem.icon || '',\n }\n}\n\nconst toUiStatusBarItems = (statusBarItems) => {\n if (!statusBarItems) {\n return []\n }\n return statusBarItems.map(toUiStatusBarItems)\n}\n\nexport const loadContent = async (state) => {\n const extensionStatusBarItems =\n await ExtensionHostStatusBarItems.getStatusBarItems()\n\n const uiStatusBarItems = toUiStatusBarItems(extensionStatusBarItems)\n return {\n ...state,\n statusBarItemsLeft: [\n // {\n // name: 'RunTests',\n // text: 'Run Tests',\n // tooltip: '',\n // command: 909021,\n // },\n ...uiStatusBarItems,\n ],\n }\n}\n\nexport const contentLoaded = async (state) => {}\n\nexport const updateStatusBarItems = async (state) => {\n const newState = await loadContent(state)\n return newState\n}\n\nexport const contentLoadedEffects = (state) => {\n // TODO dispose listener\n const handleChange = async () => {\n if (state.disposed) {\n return\n }\n await updateStatusBarItems(state)\n console.log('status bar items changed')\n }\n // maybe return cleanup function from here like react hooks\n ExtensionHostStatusBarItems.onChange(handleChange)\n}\n\nconst updateArray = (items, newItem) => {\n const index = getIndex(items, newItem)\n const before = items.slice(0, index)\n const after = items.slice(index + 1)\n return [...before, newItem, ...after]\n}\n\nexport const itemLeftCreate = (state, name, text, tooltip) => {\n const newItem = {\n name,\n text,\n tooltip,\n }\n const statusBarItemsLeft = [...state.statusBarItemsLeft, newItem]\n return {\n ...state,\n statusBarItemsLeft,\n }\n}\n\nconst getIndex = (items, item) => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].name === item.name) {\n return i\n }\n }\n return -1\n}\n\nexport const itemLeftUpdate = (state, newItem) => {\n return {\n ...state,\n statusBarItemsLeft: updateArray(state.statusBarItemsLeft, newItem),\n }\n}\n\nexport const itemRightCreate = (state, newItem) => {\n const statusBarItemsRight = [...state.statusBarItemsRight, newItem]\n return {\n ...state,\n statusBarItemsRight,\n }\n}\n\nexport const itemRightUpdate = (state, newItem) => {\n return {\n ...state,\n statusBarItemsRight: updateArray(state.statusBarItemsRight, newItem),\n }\n}\n\nexport const handleClick = (name) => {\n // sendExtensionWorker([/* statusBarItemHandleClick */ 7657, /* name */ name])\n}\n\nexport const hasFunctionalResize = true\n\nexport const resize = (state, dimensions) => {\n return {\n ...state,\n ...dimensions,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderItems = {\n isEqual(oldState, newState) {\n return (\n oldState.statusBarItemsLeft === newState.statusBarItemsLeft &&\n oldState.statusBarItemsRight === newState.statusBarItemsRight\n )\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ 'StatusBar',\n /* method */ 'setItems',\n /* statusBarItemsLeft */ newState.statusBarItemsLeft,\n /* statusBarItemsRight */ newState.statusBarItemsRight,\n ]\n },\n}\n\nexport const render = [renderItems]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletStatusBar from './ViewletStatusBar.js'\n\n// prettier-ignore\nexport const Commands = {\n 'ViewletStatusBar.updateStatusBarItems': Viewlet.wrapViewletCommand('StatusBar', ViewletStatusBar.updateStatusBarItems)\n}\n\nexport * from './ViewletStatusBar.js'\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Command from '../Command/Command.js'\nimport * as Languages from '../Languages/Languages.js'\nimport * as LifeCycle from '../LifeCycle/LifeCycle.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\nconst COLUMN_WIDTH = 9 // TODO compute this automatically once\n\n// interface Editor {\n// readonly uri: string\n// readonly type: string\n// }\n\n// interface EditorLazy {\n// readonly type: 'lazy'\n// }\n\n// interface EditorText extends Editor {\n// readonly textDocument: TextDocument\n// readonly type: 'text'\n// }\n\n// interface EditorIframe extends Editor {\n// readonly srcdoc: string\n// readonly type: 'iframe'\n// }\n\n// interface EditorImage extends Editor {\n// readonly src: string\n// readonly type: 'image'\n// }\n\n// interface EditorVideo extends Editor {\n// readonly src: string\n// readonly type: 'video'\n// }\n\nconst getMainEditor = (state) => {\n if (\n !state ||\n !state.instances ||\n !state.instances.EditorText ||\n !state.instances.EditorText.state\n ) {\n return undefined\n }\n // TODO check that type is string (else runtime error occurs and page is blank)\n return state.instances.EditorText.state\n}\n\nconst restoreEditors = async (state) => {\n // // TODO have mapping that loads custom editor module on demand\n // // file:// -> import text editor\n // // perf://startup-performance -> show startup performance\n // // perf://memory-usage -> show memory usage\n // // svg://my-file.svg -> show svg\n // // image://my-image.png -> show image\n // // video://my-video.png -> show video\n // // also editor title can be shown while content is still loading\n // if (restoredEditor.uri.startsWith('perf://')) {\n // Command.execute(/* Developer.openPerf */ 820)\n // return\n // }\n // @ts-ignore\n await openUri(state, restoredEditor.uri)\n}\n\nconst handleTokenizeChange = (languageId) => {\n // @ts-ignore\n\n const instances = ViewletState.getAllInstances()\n if (instances.EditorText) {\n const instance = instances.EditorText\n }\n // for (const editor of state.editors) {\n // if (editor.languageId === languageId) {\n // Editor.handleTokenizeChange(editor)\n // }\n // }\n}\n\nconst hydrateLazy = async () => {\n // TODO main should not know about languages\n await Languages.hydrate()\n // TODO this should be in extension host\n await Command.execute(\n /* EditorDiagnostics.hydrate */ 'EditorDiagnostics.hydrate'\n )\n}\n\nexport const name = 'Main'\n\nexport const create = (id, uri, left, top, width, height) => {\n return {\n editors: [],\n activeIndex: -1,\n focusedIndex: -1,\n left,\n top,\n width,\n height,\n }\n}\n\n// const showEditor = async (uri, languageId, content) => {\n// if (state.activeEditor) {\n// // TODO duplicate code in if/else\n// // state.editors = [state.activeEditor]\n// // Editor.replaceOne(state.activeEditor, uri, languageId, content)\n// // TODO replace editor\n// } else {\n// // state.activeEditor = Editor.create(1, uri, languageId, content)\n// // state.editors = [state.activeEditor]\n// // Editor.openOne(state.activeEditor)\n// // TODO create editor group and new editor\n// }\n\n// // TODO send type of editor\n// // 1 normal\n// // 2 side by side (settings.json, git diff, preview)\n// // 3 image\n// // 4 video\n// // 5 iframe (maybe 3/4 could also be iframe)\n// // Editor.initialSync(state.activeEditor)\n\n// // TODO use idlecallback maybe (after 350ms or something)\n// // TODO maybe use indexeddb instead\n// // TODO store all open editors\n// // await Command.execute(/* LocalStorage.setJson */ 6901, 'Main.editors', [uri])\n// }\n\n// TODO there is also openEditor function\n\nconst getTabTitle = (uri) => {\n const homeDir = Workspace.getHomeDir()\n // TODO tree shake this out in web\n if (homeDir && uri.startsWith(homeDir)) {\n return `~${uri.slice(homeDir.length)}`\n }\n return uri\n}\n\nconst findEditorWithUri = (editors, uri) => {\n for (const [i, editor] of editors.entries()) {\n if (editor.uri === uri) {\n return i\n }\n }\n return -1\n}\n\nconst TAB_HEIGHT = 35\nconst id = 'EditorText'\n\nconst getRestoredEditors = async () => {\n if (Workspace.isTest()) {\n return []\n }\n const savedState = await Command.execute(\n /* LocalStorage.getJson */ 'LocalStorage.getJson',\n /* key */ 'stateToSave'\n )\n const restoredEditor = getMainEditor(savedState)\n if (!restoredEditor) {\n return []\n }\n return [restoredEditor]\n}\n\nexport const loadContent = async (state) => {\n const editors = await getRestoredEditors()\n // @ts-ignore\n\n LifeCycle.once(LifeCycle.PHASE_TWELVE, hydrateLazy)\n return {\n ...state,\n editors,\n }\n}\n\nexport const contentLoaded = async (state) => {\n if (state.editors.length === 0) {\n return\n }\n const editor = state.editors[0]\n const top = state.top + TAB_HEIGHT\n const left = state.left\n const width = state.width\n const height = state.height - TAB_HEIGHT\n const instance = ViewletManager.create(\n ViewletModule.load,\n id,\n 'Main',\n editor.uri,\n left,\n top,\n width,\n height\n )\n const tabLabel = Workspace.pathBaseName(editor.uri)\n const tabTitle = getTabTitle(editor.uri)\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'openViewlet',\n /* id */ id,\n /* tabLabel */ tabLabel,\n /* tabTitle */ tabTitle\n )\n // TODO race condition: Viewlet may have been resized before it has loaded\n // @ts-ignore\n\n await ViewletManager.load(instance)\n}\n\nexport const openUri = async (state, uri, focus = true) => {\n Assert.object(state)\n Assert.string(uri)\n const top = state.top + TAB_HEIGHT\n const left = state.left\n const width = state.width\n const height = state.height - TAB_HEIGHT\n\n for (const editor of state.editors) {\n if (editor.uri === uri) {\n const instance = ViewletManager.create(\n ViewletModule.load,\n id,\n 'Main',\n uri,\n left,\n top,\n width,\n height\n )\n // @ts-ignore\n\n await ViewletManager.load(instance, focus)\n return\n }\n }\n const instance = ViewletManager.create(\n ViewletModule.load,\n id,\n 'Main',\n uri,\n left,\n top,\n width,\n height\n )\n const oldActiveIndex = state.activeIndex\n state.editors.push({ uri })\n state.activeIndex = state.editors.length - 1\n const tabLabel = Workspace.pathBaseName(uri)\n const tabTitle = getTabTitle(uri)\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'openViewlet',\n /* id */ id,\n /* tabLabel */ tabLabel,\n /* tabTitle */ tabTitle,\n /* oldActiveIndex */ oldActiveIndex\n )\n // @ts-ignore\n\n return ViewletManager.load(instance, focus)\n}\n\nexport const save = () => {\n // TODO handle different types of editors / custom editors / webviews\n Command.execute(/* EditorSave.editorSave */ 'Editor.save')\n}\n\n// const getEditor = (uri) => {\n// const protocol = 'file://' + uri.slice(0, 0)\n// switch (protocol) {\n// case 'file://':\n// // TODO open normal editor\n// break\n// case 'performance://monitor':\n// return import('../EditorPerformance.js')\n// case 'performance://startup':\n// return import('../EditorPerformanceStartup.js')\n// default:\n// // ask extension host for custom editor\n// break\n// }\n// }\n\nexport const openEditorWithType = async (file) => {\n // TODO resolve custom editors from extension host\n // then open extension host custom editor or normal editor\n}\n\nexport const saveWithoutFormatting = async () => {\n console.warn('not implemented')\n}\n\nexport const handleDrop = async () => {\n console.log(['main drop'])\n const clipBoardText = await SharedProcess.invoke(\n /* ClipBoard.read */ 'ClipBoard.read'\n )\n console.log({ clipBoardText })\n}\n\nexport const closeActiveEditor = (state) => {\n if (!state.activeEditor) {\n }\n}\n\nexport const closeAllEditors = (state) => {\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'dispose'\n )\n state.editors = []\n state.focusedIndex = -1\n state.selectedIndex = -1\n // TODO should call dispose method, but only in renderer-worker\n ViewletStates.remove('EditorText')\n}\n\nexport const dispose = () => {}\n\nexport const closeEditor = async (state, index) => {\n if (state.editors.length === 1) {\n closeAllEditors(state)\n return\n }\n const top = state.top\n const left = state.left\n const width = state.width\n const height = state.height\n if (index === state.activeIndex) {\n const oldActiveIndex = state.activeIndex\n state.editors.splice(index, 1)\n const newActiveIndex = index === 0 ? index : index - 1\n Viewlet.dispose('EditorText')\n state.activeIndex = newActiveIndex\n state.focusedIndex = newActiveIndex\n // const instance = Viewlet.create(id, 'uri', left, top, width, height)\n // TODO ideally content would load synchronously and there would be one layout and one paint for opening the new tab\n // except in the case where the content takes long (>100ms) to load, then it should show the tab\n // and for the content a loading spinner or (preferred) a progress bar\n // that it replaced with the actual content once it has been loaded\n // await instance.factory.refresh(instance.state, {\n // uri: previousEditor.uri,\n // top: instance.state.top,\n // left: instance.state.left,\n // height: instance.state.height,\n // columnWidth: COLUMN_WIDTH,\n // })\n await RendererProcess.invoke(\n /* Main.closeOneTab */ 2164,\n /* closeIndex */ oldActiveIndex,\n /* focusIndex */ newActiveIndex\n )\n return\n }\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeOneTabOnly',\n /* closeIndex */ index\n )\n state.editors.splice(index, 1)\n if (index < state.activeIndex) {\n state.activeIndex--\n }\n state.focusedIndex = state.activeIndex\n\n // TODO just close the tab\n}\n\nexport const closeFocusedTab = (state) => {\n closeEditor(state.focusedIndex)\n}\n\nexport const handleTabContextMenu = async (state, index, x, y) => {\n state.focusedIndex = index\n await Command.execute(\n /* ContextMenu.show */ 'ContextMenu.show',\n /* x */ x,\n /* y */ y,\n /* id */ 'tab'\n )\n}\n\nexport const focusIndex = (state, index) => {\n if (index === state.activeIndex) {\n console.log('index', index, 'is already active index')\n return\n }\n const oldActiveIndex = state.activeIndex\n state.activeIndex = index\n\n const editor = state.editors[index]\n const top = state.top + TAB_HEIGHT\n const left = state.left\n const width = state.width\n const height = state.height - TAB_HEIGHT\n\n const viewlet = ViewletManager.create(\n ViewletModule.load,\n id,\n 'Main',\n editor.uri,\n left,\n top,\n width,\n height\n )\n\n // TODO race condition\n RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'focusAnotherTab',\n /* unFocusIndex */ oldActiveIndex,\n /* focusIndex */ state.activeIndex\n )\n // @ts-ignore\n return ViewletManager.load(viewlet)\n}\n\nexport const focusFirst = (state) => {\n return focusIndex(state, 0)\n}\n\nexport const focusLast = (state) => {\n return focusIndex(state, state.editors.length - 1)\n}\n\nexport const focusPrevious = (state) => {\n const previousIndex =\n state.activeIndex === 0 ? state.editors.length - 1 : state.activeIndex - 1\n return focusIndex(state, previousIndex)\n}\n\nexport const focusNext = (state) => {\n const nextIndex =\n state.activeIndex === state.editors.length - 1 ? 0 : state.activeIndex + 1\n return focusIndex(state, nextIndex)\n}\n\nexport const handleTabClick = (state, index) => {\n console.log('focus index', index)\n return focusIndex(state, index)\n}\n\nexport const closeOthers = async (state) => {\n if (state.focusedIndex === state.activeIndex) {\n // view is kept the same, only tabs are closed\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeOthers',\n /* keepIndex */ state.focusedIndex,\n /* focusIndex */ state.focusedIndex\n )\n } else {\n // view needs to be switched to focused index\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeOthers',\n /* keepIndex */ state.focusedIndex,\n /* focusIndex */ state.focusedIndex\n )\n }\n state.editors = [state.editors[state.focusedIndex]]\n state.activeIndex = 0\n state.focusedIndex = 0\n}\n\nexport const closeTabsRight = async (state) => {\n if (state.focusedIndex >= state.activeIndex) {\n // view is kept the same, only tabs are closed\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeTabsRight',\n /* index */ state.focusedIndex\n )\n } else {\n // view needs to be switched to focused index\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeTabsRight',\n /* index */ state.focusedIndex\n )\n }\n state.editors = state.editors.slice(0, state.focusedIndex + 1)\n state.activeIndex = state.focusedIndex\n}\n\nexport const closeTabsLeft = async (state) => {\n if (state.focusedIndex <= state.activeIndex) {\n // view is kept the same, only tabs are closed\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeTabsLeft',\n /* index */ state.focusedIndex\n )\n } else {\n // view needs to be switched to focused index\n await RendererProcess.invoke(\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'Main',\n /* method */ 'closeTabsLeft',\n /* index */ state.focusedIndex\n )\n }\n state.editors = state.editors.slice(state.focusedIndex)\n state.activeIndex = state.focusedIndex\n}\n\nexport const resize = (state, dimensions) => {\n const top = dimensions.top + TAB_HEIGHT\n const left = dimensions.left\n const width = dimensions.width\n const height = dimensions.height - TAB_HEIGHT\n const childDimensions = {\n top,\n left,\n width,\n height,\n }\n const commands = Viewlet.resize('EditorText', childDimensions)\n return {\n newState: {\n ...state,\n ...dimensions,\n },\n commands,\n }\n}\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletMain from './ViewletMain.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Main.closeActiveEditor': Viewlet.wrapViewletCommand('Main', ViewletMain.closeActiveEditor),\n 'Main.closeAllEditors': Viewlet.wrapViewletCommand('Main', ViewletMain.closeAllEditors),\n 'Main.closeEditor': Viewlet.wrapViewletCommand('Main', ViewletMain.closeEditor),\n 'Main.closeFocusedTab': Viewlet.wrapViewletCommand('Main', ViewletMain.closeFocusedTab),\n 'Main.closeOthers': Viewlet.wrapViewletCommand('Main', ViewletMain.closeOthers),\n 'Main.closeTabsLeft': Viewlet.wrapViewletCommand('Main', ViewletMain.closeTabsLeft),\n 'Main.closeTabsRight': Viewlet.wrapViewletCommand('Main', ViewletMain.closeTabsRight),\n 'Main.focusFirst': Viewlet.wrapViewletCommand('Main', ViewletMain.focusFirst),\n 'Main.focusLast': Viewlet.wrapViewletCommand('Main', ViewletMain.focusLast),\n 'Main.focusNext': Viewlet.wrapViewletCommand('Main', ViewletMain.focusNext),\n 'Main.focusPrevious': Viewlet.wrapViewletCommand('Main', ViewletMain.focusPrevious),\n 'Main.handleDrop': Viewlet.wrapViewletCommand('Main', ViewletMain.handleDrop),\n 'Main.handleTabClick': Viewlet.wrapViewletCommand('Main', ViewletMain.handleTabClick),\n 'Main.handleTabContextMenu': Viewlet.wrapViewletCommand('Main', ViewletMain.handleTabContextMenu),\n 'Main.hydrate': Viewlet.wrapViewletCommand('Main', ViewletMain.hydrate),\n 'Main.openUri': Viewlet.wrapViewletCommand('Main', ViewletMain.openUri),\n 'Main.save': Viewlet.wrapViewletCommand('Main', ViewletMain.save),\n}\n\nexport * from './ViewletMain.js'\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0] ?? []\n}\n\nexport const executeCompletionProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onCompletion:${editor.languageId}`,\n method: 'ExtensionHostCompletion.execute',\n params: [editor.id, offset],\n noProviderFoundMessage: 'no completion provider found',\n noProviderFoundResult: [],\n combineResults,\n })\n}\n", "export const Property = 1\nexport const Value = 2\nexport const Function = 3\nexport const Variable = 4\nexport const Keyword = 5\nexport const Folder = 6\nexport const File = 7\n", "import * as Command from '../Command/Command.js'\nimport * as EditorPosition from '../EditorCommand/EditorCommandPosition.js'\nimport * as ExtensionHostCompletion from '../ExtensionHost/ExtensionHostCompletion.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as EditorShowMessage from '../EditorCommand/EditorCommandShowMessage.js'\nimport * as EditorCompletionType from '../EditorCompletionType/EditorCompletionType.js'\n\nexport const create = (id, uri, top, left, width, height) => {\n console.log({ id, uri, top, left, width, height })\n return {\n completionItems: [],\n focusedIndex: 0,\n isOpened: false,\n openingReason: 0,\n editor: undefined,\n abortController: new AbortController(),\n rowIndex: 0,\n columnIndex: 0,\n leadingWord: '',\n loadingTimeout: -1,\n filteredCompletionItems: [],\n visibleItems: [],\n x: 0,\n y: 0,\n }\n}\n\n// TODO possible to do this with events/state machine instead of promises -> enables canceling operations / concurrent calls\nconst getCompletions = async (editor) => {\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n // Editor.sync(editor)\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const completions = await ExtensionHostCompletion.executeCompletionProvider(\n editor,\n offset\n )\n return completions\n}\n\nconst filterCompletionItems = (completionItems, word) => {\n const includesWord = (completionItem) => {\n return completionItem.label.includes(word)\n }\n const filteredCompletions = completionItems.filter(includesWord)\n return filteredCompletions\n}\n\nconst getEditor = () => {\n return Viewlet.getState('EditorText')\n}\n\nconst getLabel = (item) => {\n return item.label\n}\n\nconst EditorCompletionClassNames = {\n [EditorCompletionType.Property]: 'IconProperty',\n [EditorCompletionType.Value]: 'IconValue',\n [EditorCompletionType.Function]: 'IconFunction',\n [EditorCompletionType.Variable]: 'IconVariable',\n [EditorCompletionType.Keyword]: 'IconKeyword',\n}\n\nconst defaultClassName = 'IconDefault'\n\nconst getIconClassName = (item) => {\n return EditorCompletionClassNames[item.kind] || defaultClassName\n}\n\nconst getVisibleItems = (filteredItems) => {\n const visibleItems = []\n for (const filteredItem of filteredItems) {\n visibleItems.push({\n label: getLabel(filteredItem),\n icon: getIconClassName(filteredItem),\n })\n }\n return visibleItems\n // for(const )\n}\n\nconst getDisplayErrorMessage = (error) => {\n const message = `${error}`\n const errorPrefix = 'Error: '\n if (message.startsWith(errorPrefix)) {\n return message.slice(errorPrefix.length)\n }\n return message\n}\n\nexport const loadContent = async (state) => {\n const editor = getEditor()\n const completionItems = await getCompletions(editor)\n const filteredCompletionItems = filterCompletionItems(completionItems, '')\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const x = EditorPosition.x(editor, rowIndex, columnIndex)\n const y = EditorPosition.y(editor, rowIndex, columnIndex)\n const visibleItems = getVisibleItems(filteredCompletionItems)\n console.log({ completionItems, filteredCompletionItems, visibleItems })\n return {\n ...state,\n completionItems,\n filteredCompletionItems,\n visibleItems,\n x,\n y,\n }\n}\n\nexport const handleError = async (error) => {\n const displayErrorMessage = getDisplayErrorMessage(error)\n const editor = getEditor()\n await EditorShowMessage.editorShowMessage(\n /* editor */ editor,\n /* rowIndex */ 0,\n /* columnIndex */ 0,\n /* message */ displayErrorMessage,\n /* isError */ true\n )\n}\n\nexport const loadingContent = () => {\n const editor = getEditor()\n console.log('show loading')\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const x = EditorPosition.x(editor, rowIndex, columnIndex)\n const y = EditorPosition.y(editor, rowIndex, columnIndex)\n const changes = [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorCompletion',\n /* method */ 'showLoading',\n /* x */ x,\n /* y */ y,\n ]\n return changes\n}\n\nexport const contentLoaded = () => {\n // noop\n}\n\nexport const handleSelectionChange = (state, selectionChanges) => {}\n\nexport const advance = (state, word) => {\n const filteredCompletionItems = filterCompletionItems(\n state.completionItems,\n word\n )\n return {\n ...state,\n filteredCompletionItems,\n }\n}\n\nconst getInsertSnippet = (word, leadingWord) => {\n if (word.startsWith(leadingWord)) {\n return word.slice(leadingWord.length)\n }\n return word\n}\n\nconst select = async (state, completionItem) => {\n const { leadingWord } = state\n const word = completionItem.label\n const snippet = getInsertSnippet(word, leadingWord)\n // TODO type and dispose commands should be sent to renderer process at the same time\n await Command.execute(/* Editor.type */ 'Editor.type', /* text */ snippet)\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const selectIndex = (state, index) => {\n const completionItem = state.filteredCompletionItems[index]\n return select(state, completionItem)\n}\n\nexport const focusIndex = (state, index) => {\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nexport const focusFirst = (state) => {\n return focusIndex(state, 0)\n}\n\nexport const focusLast = (state) => {\n return focusIndex(state, state.completionItems.length - 1)\n}\n\nexport const focusPrevious = (state) => {\n if (state.focusedIndex === 0) {\n return focusLast(state)\n }\n return focusIndex(state, state.focusedIndex - 1)\n}\n\nexport const focusNext = (state) => {\n if (state.focusedIndex === state.completionItems.length - 1) {\n return focusFirst(state)\n }\n return focusIndex(state, state.focusedIndex + 1)\n}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nexport const hasFunctionalRender = true\n\nconst renderPosition = {\n isEqual(oldState, newState) {\n return oldState.x === newState.x && oldState.y === newState.y\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorCompletion',\n /* method */ 'setPosition',\n /* x */ newState.x,\n /* y */ newState.y,\n ]\n },\n}\n\nconst renderItems = {\n isEqual(oldState, newState) {\n return oldState.visibleItems === newState.visibleItems\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'EditorCompletion',\n /* method */ 'setItems',\n /* items */ newState.visibleItems,\n /* reason */ 1,\n ]\n },\n}\n\nexport const render = [renderItems, renderPosition]\n", "import * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletEditorCompletion from './ViewletEditorCompletion.js'\n\n// prettier-ignore\nexport const Commands = {\n 'EditorCompletion.dispose': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.dispose),\n 'EditorCompletion.focusFirst': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.focusFirst),\n 'EditorCompletion.focusLast': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.focusLast),\n 'EditorCompletion.focusNext': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.focusNext),\n 'EditorCompletion.focusPrevious': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.focusPrevious),\n 'EditorCompletion.selectCurrent': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.selectCurrent),\n 'EditorCompletion.selectIndex': Viewlet.wrapViewletCommand('EditorCompletion', ViewletEditorCompletion.selectIndex),\n}\n\nexport * from './ViewletEditorCompletion.js'\n", "import * as Assert from '../Assert/Assert.js'\nimport * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeReferenceProvider = async (editor, offset) => {\n const result = await ExtensionHostShared.executeProviders({\n event: `onReferences:${editor.languageId}`,\n method: 'ExtensionHostReferences.executeReferenceProvider',\n params: [editor.id, offset],\n noProviderFoundMessage: 'no reference providers found',\n noProviderFoundResult: [],\n combineResults,\n })\n Assert.array(result)\n console.log({ result })\n return result\n}\n", "import * as Command from '../Command/Command.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\n\nexport const name = 'Locations'\n\nexport const create = (id, uri) => {\n return {\n references: [],\n message: '',\n displayReferences: [],\n focusedIndex: -1,\n id,\n }\n}\n\nconst getMessage = (resultCount, fileCount) => {\n if (resultCount === 0) {\n return 'No Results'\n }\n if (resultCount === 1 && fileCount === 1) {\n return '1 result in 1 file'\n }\n if (fileCount === 1) {\n return `${resultCount} results in 1 file`\n }\n return `${resultCount} results in ${fileCount} files`\n}\n\nconst getName = (uri) => {\n return uri.slice(uri.lastIndexOf('/') + 1)\n}\n\nconst getDisplayReferences = (references) => {\n const fileMap = Object.create(null)\n const displayReferences = []\n let current = {\n uri: '',\n startOffset: 0,\n endOffset: 0,\n lineText: '',\n }\n let outerPosInSet = 1\n let innerPosInSet = 1\n let fileCount = 0\n let index = 0\n for (const reference of references) {\n if (reference.uri === current.uri) {\n displayReferences.push({\n depth: 2,\n posInSet: innerPosInSet++,\n setSize: 1,\n type: 'leaf',\n uri: '',\n name: '',\n lineText: reference.lineText,\n index: index++,\n })\n } else {\n fileCount++\n current = reference\n innerPosInSet = 1\n const name = getName(reference.uri)\n displayReferences.push({\n depth: 1,\n posInSet: outerPosInSet++,\n setSize: 1,\n type: 'expanded',\n uri: reference.uri,\n name,\n lineText: '',\n icon: IconTheme.getIcon({\n type: 'file',\n path: reference.uri,\n name,\n }),\n index: index++,\n })\n displayReferences.push({\n depth: 2,\n posInSet: innerPosInSet++,\n setSize: 1,\n type: 'leaf',\n uri: '',\n name: '',\n lineText: current.lineText,\n index: index++,\n })\n }\n }\n\n return {\n message: getMessage(references.length, fileCount),\n displayReferences,\n }\n}\n\n// TODO speed up this function by 130% by not running activation event (onReferences) again and again\n// e.g. (21ms activation event, 11ms getReferences) => (11ms getReferences)\nexport const loadContent = async (state, getReferences) => {\n const references = await getReferences()\n const { message, displayReferences } = getDisplayReferences(references)\n return {\n ...state,\n references,\n displayReferences,\n message,\n }\n}\n\nexport const contentLoaded = () => {}\n\nexport const dispose = (state) => {\n return {\n ...state,\n disposed: true,\n }\n}\n\nconst getUri = (state, index) => {\n for (let i = index; i >= 0; i--) {\n if (state.displayReferences[i].depth === 1) {\n return state.displayReferences[i].uri\n }\n }\n return ''\n}\n\nconst selectIndexLead = async (state, index) => {\n const uri = getUri(state, index)\n // TODO open file and jump to line\n await Command.execute(/* Main.openUri */ 'Main.openUri', /* uri */ uri)\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nconst selectIndexExpanded = (state, index) => {\n // TODO expand\n\n return { ...state, focusedIndex: index }\n}\n\nconst selectIndexCollapsed = (state, index) => {\n // TODO collapse\n\n return { ...state, focusedIndex: index }\n}\n\nexport const selectIndex = (state, index) => {\n const displayReference = state.displayReferences[index]\n switch (displayReference.type) {\n case 'leaf':\n return selectIndexLead(state, index)\n case 'expanded':\n return selectIndexExpanded(state, index)\n case 'collapsed':\n return selectIndexCollapsed(state, index)\n default:\n console.warn(displayReference)\n return state\n }\n}\n\nexport const focusIndex = (state, index) => {\n return {\n ...state,\n focusedIndex: index,\n }\n}\n\nexport const focusFirst = (state) => {\n if (state.displayReferences.length === 0) {\n return state\n }\n return focusIndex(state, 0)\n}\n\nexport const focusPrevious = (state) => {\n if (state.focusedIndex === 0 || state.focusedIndex === -1) {\n return state\n }\n return focusIndex(state, state.focusedIndex - 1)\n}\n\nexport const focusNext = (state) => {\n if (state.focusedIndex === state.displayReferences.length - 1) {\n return state\n }\n return focusIndex(state, state.focusedIndex + 1)\n}\n\nexport const focusLast = (state) => {\n if (state.focusedIndex === state.displayReferences.length - 1) {\n return state\n }\n return focusIndex(state, state.displayReferences.length - 1)\n}\n\nexport const selectCurrent = (state) => {\n if (state.focusedIndex === -1) {\n return state\n }\n return selectIndex(state, state.focusedIndex)\n}\n\nexport const hasFunctionalRender = true\n\nconst renderLocations = {\n isEqual(oldState, newState) {\n return oldState.displayReferences === newState.displayReferences\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ newState.id,\n /* method */ 'setLocations',\n /* references */ newState.displayReferences,\n ]\n },\n}\n\nconst renderMessage = {\n isEqual(oldState, newState) {\n return oldState.message === newState.message\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ newState.id,\n /* method */ 'setMessage',\n /* message */ newState.message,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return oldState.focusedIndex === newState.focusedIndex\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.invoke */ 'Viewlet.send',\n /* id */ newState.id,\n /* method */ 'setFocusedIndex',\n /* oldFocusedIndex */ oldState.focusedIndex,\n /* newFocusedIndex */ newState.focusedIndex,\n ]\n },\n}\n\nexport const render = [renderFocusedIndex, renderLocations, renderMessage]\n", "import * as ExtensionHostReferences from '../ExtensionHost/ExtensionHostReference.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletLocations from '../ViewletLocations/ViewletLocations.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\nconst getReferences = async () => {\n const editor = ViewletStates.getState('EditorText')\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const references = await ExtensionHostReferences.executeReferenceProvider(\n editor,\n offset\n )\n return references\n}\n\nexport const name = 'References'\n\nexport const create = ViewletLocations.create\n\n// TODO speed up this function by 130% by not running activation event (onReferences) again and again\n// e.g. (21ms activation event, 11ms getReferences) => (11ms getReferences)\nexport const loadContent = async (state) => {\n return ViewletLocations.loadContent(state, getReferences)\n}\n\n// TODO side effect is not good here, find a way to call ViewletLocations\nexport const contentLoaded = (state) => {\n ViewletStates.set('Locations', {\n factory: ViewletLocations,\n state,\n })\n}\n\nexport const dispose = ViewletLocations.dispose\n\nexport const hasFunctionalRender = ViewletLocations.hasFunctionalRender\n\nexport const render = ViewletLocations.render\n", "export const Commands = {}\n\nexport * from './ViewletReferences.js'\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResults = (results) => {\n return results[0]\n}\n\nexport const executeImplementationProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onImplementation:${editor.languageId}`,\n method: 'ExtensionHostImplementation.executeImplementationProvider',\n params: [editor.id, offset],\n noProviderFoundMessage: 'No implementation provider found',\n combineResults,\n })\n}\n", "import * as ExtensionHostImplementation from '../ExtensionHost/ExtensionHostImplementation.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletLocations from '../ViewletLocations/ViewletLocations.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\n\nexport const name = 'Implementations'\n\n// TODO speed up this function by 130% by not running activation event (onReferences) again and again\n// e.g. (21ms activation event, 11ms getReferences) => (11ms getReferences)\nconst getImplementations = async () => {\n const editor = ViewletStates.getState('EditorText')\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n const implementations =\n await ExtensionHostImplementation.executeImplementationProvider(\n editor,\n offset\n )\n console.log({ implementations })\n return implementations\n}\n\nexport const create = ViewletLocations.create\n\nexport const loadContent = async (state) => {\n return ViewletLocations.loadContent(state, getImplementations)\n}\n\nexport const contentLoaded = (state) => {\n ViewletStates.set('Locations', {\n factory: ViewletLocations,\n state,\n })\n}\n\nexport const dispose = ViewletLocations.dispose\n\nexport const hasFunctionalRender = ViewletLocations.hasFunctionalRender\n\nexport const render = ViewletLocations.render\n", "export const Commands = {}\n\nexport * from './ViewletImplementations.js'\n", "export const name = 'noop'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return 'No Results'\n}\n\nexport const getPicks = async (value) => {\n return []\n}\n\nexport const selectPick = async (item) => {\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\nimport * as ExtensionMeta from '../ExtensionMeta/ExtensionMeta.js'\n\nconst getCommandsFromExtension = (extension) => {\n if (!extension || !extension.commands) {\n return []\n }\n return extension.commands\n}\n\nconst getCommandsFromExtensions = (extensions) => {\n return extensions.flatMap(getCommandsFromExtension)\n}\n\nexport const getCommands = async () => {\n const extensions = await ExtensionMeta.getExtensions()\n const commands = getCommandsFromExtensions(extensions)\n return commands\n}\n\n// TODO add test for this\n// TODO add test for when this errors\n\nexport const executeCommand = (id) => {\n return ExtensionHostShared.executeProvider({\n event: `onCommand:${id}`,\n method: 'ExtensionHost.executeCommand',\n params: [id],\n noProviderFoundMessage: 'No command provider found',\n })\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as ExtensionHostCommands from '../ExtensionHost/ExtensionHostCommands.js'\nimport * as Platform from '../Platform/Platform.js'\n\nexport const name = 'command'\n\nexport const getPlaceholder = () => {\n return 'Type the name of a command to run.'\n}\n\nexport const helpEntries = () => {\n return [\n {\n description: 'Show And Run Commands',\n category: 'global commands',\n },\n ]\n}\n\nexport const getLabel = () => {\n return ''\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No matching results',\n }\n}\n\n// TODO combine Ajax with cache (specify strategy: cacheFirst, networkFirst)\nconst getBuiltinPicks = async () => {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/config/builtinCommands.json`\n const builtinPicks = await Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ url\n )\n return builtinPicks\n}\n\nconst prefixIdWithExt = (item) => {\n if (!item.label) {\n ErrorHandling.warn('[QuickPick] item has missing label', item)\n }\n if (!item.id) {\n ErrorHandling.warn('[QuickPick] item has missing id', item)\n }\n return {\n ...item,\n id: `ext.${item.id}`,\n label: item.label || item.id,\n }\n}\n\nconst getExtensionPicks = async () => {\n try {\n // TODO don't call this every time\n const extensionPicks = await ExtensionHostCommands.getCommands()\n console.log({ extensionPicks })\n if (!extensionPicks) {\n return []\n }\n const mappedPicks = extensionPicks.map(prefixIdWithExt)\n return mappedPicks\n } catch (error) {\n console.error(`Failed to get extension picks: ${error}`)\n return []\n }\n}\n\n// TODO send strings to renderer process only once for next occurrence send uint16array of ids of strings\n\nexport const getPicks = async () => {\n if (Platform.platform === 'web') {\n const builtinPicks = await getBuiltinPicks()\n return builtinPicks\n }\n const builtinPicks = await getBuiltinPicks()\n const extensionPicks = await getExtensionPicks()\n return [...builtinPicks, ...extensionPicks]\n}\n\nconst selectPickBuiltin = async (item) => {\n // TODO ids should be all numbers for efficiency -> also directly can call command\n await Command.execute(item.id)\n}\n\nconst selectPickExtension = async (item) => {\n const id = item.id.slice(4) // TODO lots of string allocation with 'ext.' find a better way to separate builtin commands from extension commands\n try {\n await ExtensionHostCommands.executeCommand(id)\n } catch (error) {\n await ErrorHandling.showErrorDialog(error)\n }\n}\n\nexport const selectPick = async (item) => {\n if (item.id.startsWith('ext.')) {\n await selectPickExtension(item)\n } else {\n await selectPickBuiltin(item)\n }\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "export const name = 'symbol'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No symbol found',\n }\n}\n\nexport const getPicks = async () => {\n const picks = []\n return picks\n}\n\nexport const selectPick = async (item) => {\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "// import * as ViewService from '../ViewService/ViewService.js'\n\nexport const name = 'workspace-symbol'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return {\n label: 'no workspace symbols found',\n }\n}\n\nexport const getPicks = async () => {\n const picks = []\n return picks\n}\n\nexport const selectPick = async (item) => {\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const name = 'goToLine'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return undefined\n}\n\nexport const getPicks = async () => {\n const picks = [\n {\n label: '1',\n },\n {\n label: '2',\n },\n {\n label: '3',\n },\n {\n label: '4',\n },\n {\n label: '5',\n },\n {\n label: '6',\n },\n ]\n return picks\n}\n\nexport const selectPick = async (item) => {\n const rowIndex = Number.parseInt(item.label)\n const position = {\n rowIndex,\n columnIndex: 5,\n }\n await Command.execute(\n /* EditorSetCursor.editorSetCursor */ 396,\n /* position */ position\n )\n // TODO put cursor onto that line\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "// TODO probably not needed\n\nexport const getPlaceholder = () => {\n return 'Type the name of a view, output channel or terminal to open.'\n}\n\nexport const getHelpEntries = () => {\n return undefined\n}\n\nconst toPick = (view) => ({\n label: view,\n})\n\nexport const getPicks = async () => {\n // const views = ViewService.getViews()\n // const picks = views.map(toPick)\n // return picks\n return []\n}\n\nexport const selectPick = async (item) => {\n // Command.execute(/* openView */ 549, /* viewName */ item.label)\n // return {\n // command: 'hide',\n // }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\nconst searchFileWeb = (path, value) => {\n // TODO\n return []\n}\n\nconst searchFileRemote = async (path, value) => {\n const files = await SharedProcess.invoke(\n /* SearchFile.searchFile */ 'SearchFile.searchFile',\n /* path */ path,\n /* searchTerm */ value\n )\n return files\n}\n\nexport const searchFile = async (path, value) => {\n switch (Platform.platform) {\n case 'web':\n return searchFileWeb(path, value)\n case 'electron':\n case 'remote':\n return searchFileRemote(path, value)\n default:\n return []\n }\n}\n", "import * as Command from '../Command/Command.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as SearchFile from '../SearchFile/SearchFile.js'\nimport * as Workspace from '../Workspace/Workspace.js'\n\nconst searchFile = async (path, value) => {\n const files = await SearchFile.searchFile(\n /* path */ path,\n /* searchTerm */ value\n )\n return files\n}\n\nconst openUri = (path) => {\n return Command.execute(/* Main.openUri */ 'Main.openUri', /* uri */ path)\n}\n\nconst getIcon = (file) => {\n const baseName = Workspace.pathBaseName(file)\n return IconTheme.getFileIcon({ name: baseName })\n}\n\nconst toPick = (file) => {\n const icon = getIcon(file)\n return {\n label: file,\n icon,\n }\n}\n\nexport const name = 'file'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getLabel = () => {\n return 'Files'\n}\n\n// TODO help entries should not be here\nexport const getHelpEntries = () => {\n return [\n {\n description: 'Go to file',\n category: 'global commands',\n },\n ]\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No matching results',\n }\n}\n\nexport const getPicks = async (searchValue) => {\n const workspace = Workspace.state.workspacePath\n if (!workspace) {\n return []\n }\n const files = await searchFile(workspace, searchValue)\n const picks = files.map(toPick)\n return picks\n}\n\nexport const selectPick = async (item) => {\n const workspace = Workspace.state.workspacePath\n const absolutePath = `${workspace}/${item.label}`\n await openUri(absolutePath)\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "import * as QuickPickNoop from './QuickPickNoop.js'\n\n// TODO cache quick pick items -> don't send every time from renderer worker to renderer process\n// maybe cache by id opening commands -> has all commands cached\n// when filtering -> sends all indices (uint16Array) to renderer process instead of filtered/sorted command objects\n\nconst RECENT_PICKS_MAX_SIZE = 3\n\n// const PROVIDER_NOOP = 0\n// const PROVIDER_COMMAND = 1\n// const PROVIDER_SYMBOL = 2\n// const PROVIDER_WORKSPACE_SYMBOL = 3\n// const PROVIDER_GO_TO_LINE = 4\n// const PROVIDER_VIEW = 5\n\nexport const state = {\n // providerId: PROVIDER_NOOP,\n provider: QuickPickNoop,\n prefix: 'string-that-should-never-match-another-string',\n}\n\n/**\n * @type {string}\n */\nexport const name = 'everything'\n\nexport const getPlaceholder = () => {\n return state.provider.getPlaceholder()\n}\n\nexport const getLabel = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return state.provider.getHelpEntries()\n}\n\nexport const getNoResults = () => {\n return state.provider.getNoResults()\n}\n\nconst getPrefix = (value) => {\n if (value.startsWith('>')) {\n return '>'\n }\n if (value.startsWith('@')) {\n return '@'\n }\n if (value.startsWith('#')) {\n return '#'\n }\n if (value.startsWith(':')) {\n return ':'\n }\n if (value.startsWith('view ')) {\n return 'view '\n }\n return ''\n}\n\nconst getQuickPickProvider = (prefix) => {\n // TODO could use enum for prefix\n // TODO could use regex to extract prefix\n // TODO or could check first letter char code (less comparisons)\n switch (prefix) {\n case '>':\n return import('./QuickPickCommand.js')\n case '@':\n return import('./QuickPickSymbol.js')\n case '#':\n return import('./QuickPickWorkspaceSymbol.js')\n case ':':\n return import('./QuickPickGoToLine.js')\n case 'view':\n return import('./QuickPickView.js')\n default:\n return import('./QuickPickFile.js')\n }\n}\n\nexport const getPicks = async (value) => {\n const prefix = getPrefix(value)\n // TODO race condition\n if (state.prefix !== prefix) {\n state.prefix = prefix\n // @ts-ignore\n state.provider = await getQuickPickProvider(prefix)\n }\n // TODO this line is a bit duplicated with getFilterValue\n const slicedValue = value.slice(prefix.length)\n const picks = await state.provider.getPicks(slicedValue)\n return picks\n}\n\nconst getPick = (state, index) => {\n // if (index < state.recentPicks.length) {\n // return state.recentPicks[index]\n // }\n // index -= state.recentPicks.length\n if (index < state.filteredPicks.length) {\n return state.filteredPicks[index]\n }\n console.warn('no pick matching index', index)\n}\n\nexport const selectPick = (item) => {\n return state.provider.selectPick(item)\n}\n\nexport const openCommandPalette = () => {\n // show('>')\n}\n\nexport const openView = () => {\n // show('view ')\n}\n\nexport const getFilterValue = (value) => {\n return value.slice(state.prefix.length)\n}\n", "export const InsertText = 'insertText'\n\nexport const DeleteContentBackward = 'deleteContentBackward'\n\nexport const DeleteContentForward = 'deleteContentForward'\n\nexport const DeleteWordForward = 'deleteWordForward'\n\nexport const DeleteWordBackward = 'deleteWordBackward'\n", "export const name = 'number'\n\nexport const getPlaceholder = () => {\n return ''\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No matching results',\n }\n}\n\nexport const getPicks = async () => {\n const picks = [\n {\n label: '1',\n },\n {\n label: '2',\n },\n {\n label: '3',\n },\n {\n label: '4',\n },\n {\n label: '5',\n },\n {\n label: '6',\n },\n {\n label: '7',\n },\n {\n label: '8',\n },\n {\n label: '9',\n },\n {\n label: '10',\n },\n ]\n return picks\n}\n\nexport const selectPick = async (item) => {\n return {\n command: 'hide',\n }\n}\n", "import * as Command from '../Command/Command.js'\n\nconst getRecentlyOpened = () => {\n return Command.execute(\n /* RecentlyOpened.getRecentlyOpened */ 'RecentlyOpened.getRecentlyOpened'\n )\n}\n\nconst openWorkspaceFolder = (uri) => {\n return Command.execute(\n /* Workspace.setPath */ 'Workspace.setPath',\n /* path */ uri\n )\n}\n\nexport const getPlaceholder = () => {\n return 'Select to open'\n}\n\nexport const getLabel = () => {\n return 'Open Recent'\n}\n\nexport const getHelpEntries = () => {\n return []\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No recently opened folders found',\n }\n}\n\nconst toPick = (path) => {\n return {\n label: path,\n }\n}\n\n// TODO could also change api so that getPicks returns an array of anything\n// and the transformPick gets the label for each pick\n// This would make the code more module since the code for getting the picks\n// would be more independent of the specific data format of the quickpick provider\n\nexport const getPicks = async () => {\n const recentlyOpened = await getRecentlyOpened()\n return recentlyOpened.map(toPick)\n}\n\n// TODO selectPick should be independent of show/hide\nexport const selectPick = async (pick) => {\n const path = pick.label\n await openWorkspaceFolder(path)\n return {\n command: 'hide',\n }\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\nconst getColorThemeNames = async () => {\n if (Platform.platform === 'web') {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/config/themes.json`\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n }\n return SharedProcess.invoke(\n /* ExtensionHost.getColorThemeNames */ 'ExtensionHost.getColorThemeNames'\n )\n}\n\nconst setColorTheme = (id) => {\n return Command.execute(\n /* ColorTheme.setColorTheme */ 5611,\n /* colorThemeId */ id\n )\n}\n\nexport const getPlaceholder = () => {\n return 'Select Color Theme'\n}\n\nexport const getLabel = () => {\n return 'Select Color Theme'\n}\n\nconst toPick = (colorThemeName) => {\n return {\n label: colorThemeName,\n }\n}\n\nexport const getPickLabel = (colorThemeName) => {\n return colorThemeName\n}\n\nexport const getPicks = async (searchValue) => {\n const colorThemeNames = await getColorThemeNames()\n const picks = colorThemeNames.map(toPick)\n return picks\n}\n\nexport const selectPick = async (item) => {\n await setColorTheme(/* colorThemeId */ item.label)\n return {\n command: 'hide',\n }\n}\n\nexport const focusPick = async (item) => {\n await setColorTheme(/* colorThemeId */ item.label)\n}\n\nexport const getFilterValue = (value) => {\n return value\n}\n\nexport const getNoResults = () => {\n return {\n label: 'No matching color themes found',\n }\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as FuzzySearch from '../FuzzySearch/FuzzySearch.js'\nimport * as QuickPickEveryThing from '../QuickPick/QuickPickEverything.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as InputEventType from '../InputEventType/InputEventType.js'\n// TODO send open signal to renderer process before items are ready\n// that way user can already type while items are still loading\n\n// TODO cache quick pick items -> don't send every time from renderer worker to renderer process\n// maybe cache by id opening commands -> has all commands cached\n// when filtering -> sends all indices (uint16Array) to renderer process instead of filtered/sorted command objects\n\nconst RECENT_PICKS_MAX_SIZE = 3\nconst ITEM_HEIGHT = 22\n\n// state:\n// 1. default\n// 2. creating (input is ready, but there are no items yet)\n// 3. finished\n\nconst QuickPickState = {\n Default: 0,\n Creating: 1,\n Finished: 2,\n}\n\nexport const name = 'QuickPick'\n\nexport const create = (id, uri, top, left, width, height) => {\n return {\n state: QuickPickState.Default,\n picks: [],\n items: [],\n recentPicks: [],\n recentPickIds: new Map(), // TODO use object.create(null) instead\n versionId: 0,\n provider: QuickPickEveryThing, // TODO make this dynamic again\n focusedIndex: -1,\n warned: [],\n visiblePicks: [],\n minLineY: 0,\n maxLineY: 0,\n maxVisibleItems: 10,\n uri,\n cursorOffset: 0,\n deltaY: 0,\n itemHeight: 22,\n height: 300,\n }\n}\n\n// TODO naming for provider.getNoResults is a bit weird\n\nconst filterPicks = (state, picks, exclude, value) => {\n // TODO every pick should have label\n const filterPick = (pick) => {\n if (exclude.has(pick.id)) {\n return false\n }\n if (!pick.label && !state.warned.includes(JSON.stringify(pick))) {\n console.warn('[QuickPick] item has missing label', pick)\n state.warned.push(JSON.stringify(pick))\n return false\n }\n const labelMatch = FuzzySearch.fuzzySearch(value, pick.label || pick.id)\n if (labelMatch) {\n return labelMatch\n }\n // TODO also filtering for aliases might be expensive\n // TODO maybe only filter for aliases if prefix is longer than 4-5 characters\n // otherwise both will be found anywayf\n // e.g. \"Relo\" matches \"Window Reload\" and \"Reload Window\"\n // But \"Reload Win\" only matches \"Reload Window\"\n if (pick.aliases) {\n for (const alias of pick.aliases) {\n if (FuzzySearch.fuzzySearch(value, alias)) {\n return true\n }\n }\n }\n return false\n }\n const items = picks.filter(filterPick)\n return items\n}\n\nconst getVisible = (items, minLineY, maxLineY) => {\n const visibleItems = []\n const setSize = items.length\n const max = Math.min(items.length, maxLineY)\n for (let i = minLineY; i < max; i++) {\n const item = items[i]\n visibleItems.push({\n label: item.label,\n icon: item.icon,\n posInSet: i + 1,\n setSize,\n })\n }\n return visibleItems\n}\n\nconst getFilteredItems = (state, picks, filterValue) => {\n Assert.object(state)\n Assert.array(picks)\n Assert.string(filterValue)\n const items = filterPicks(state, picks, state.recentPickIds, filterValue)\n return items\n // TODO avoid mutation\n // state.items = items\n // const slicedPicks = slicePicks(items)\n // return toDisplayPicks(slicedPicks)\n}\n\nconst getProvider = (uri) => {\n switch (uri) {\n case 'quickPick://commandPalette':\n return import('../QuickPick/QuickPickCommand.js')\n case 'quickPick://file':\n return import('../QuickPick/QuickPickFile.js')\n case 'quickPick://everything':\n return import('../QuickPick/QuickPickEverything.js')\n case 'quickPick://noop':\n return import('../QuickPick/QuickPickNoop.js')\n case 'quickPick://number':\n return import('../QuickPick/QuickPickNumber.js')\n case 'quickPick://recent':\n return import('../QuickPick/QuickPickOpenRecent.js')\n case 'quickPick://color-theme':\n return import('../QuickPick/QuickPickColorTheme.js')\n case 'quickPick://symbol':\n return import('../QuickPick/QuickPickSymbol.js')\n case 'quickPick://view':\n return import('../QuickPick/QuickPickView.js')\n case 'quickPick://workspace-symbol':\n return import('../QuickPick/QuickPickWorkspaceSymbol.js')\n default:\n throw new Error(`unsupported quick pick type: ${uri}`)\n }\n}\n\nconst getDefaultValue = (uri) => {\n switch (uri) {\n case 'quickPick://everything':\n return '>'\n default:\n return ''\n }\n}\n\nexport const loadContent = async (state) => {\n const uri = state.uri\n const value = getDefaultValue(uri)\n const provider = await getProvider(uri)\n const newPicks = await provider.getPicks(value)\n Assert.array(newPicks)\n const filterValue = provider.getFilterValue(value)\n const items = getFilteredItems(state, newPicks, filterValue)\n const placeholder = provider.getPlaceholder()\n const label = provider.getLabel()\n const minLineY = 0\n const maxLineY = Math.min(\n minLineY + state.maxVisibleItems,\n newPicks.length - 1\n )\n return {\n ...state,\n picks: newPicks,\n items,\n focusedIndex: 0,\n state: QuickPickState.Finished,\n minLineY,\n maxLineY,\n value,\n cursorOffset: value.length,\n }\n}\n\nexport const contentLoaded = () => {}\n\nexport const dispose = (state) => {\n return state\n}\n\nexport const handleBlur = async (state) => {\n console.log('quickpick blur')\n await Viewlet.closeWidget('QuickPick')\n return state\n}\n\nconst getPick = (state, index) => {\n Assert.object(state)\n Assert.number(index)\n // if (index < state.recentPicks.length) {\n // return state.recentPicks[index]\n // }\n // index -= state.recentPicks.length\n if (index < state.items.length) {\n return state.items[index]\n }\n console.warn('no pick matching index', index)\n}\n\nconst findLabelIndex = (items, label) => {\n for (let i = 0; i < items.length; i++) {\n if (items[i].label === label) {\n return i\n }\n }\n return -1\n}\n\nexport const selectItem = (state, label) => {\n Assert.string(label)\n const index = findLabelIndex(state.items, label)\n console.log({ index })\n if (index === -1) {\n return state\n }\n return selectIndex(state, index)\n}\n\nexport const selectIndex = async (state, index, button = /* left */ 0) => {\n const actualIndex = index + state.minLineY\n const pick = getPick(state, actualIndex)\n const selectPickResult = await state.provider.selectPick(\n pick,\n actualIndex,\n button\n )\n Assert.object(selectPickResult)\n Assert.string(selectPickResult.command)\n const { command } = selectPickResult\n switch (command) {\n case 'hide':\n await Viewlet.closeWidget('QuickPick')\n return state\n default:\n break\n }\n\n // TODO recent picks should be per provider\n // if (!state.recentPickIds.has(pick.id)) {\n // state.recentPicks.unshift(pick)\n // state.recentPickIds.add(pick.id)\n // }\n // if (state.recentPicks.length > RECENT_PICKS_MAX_SIZE) {\n // const last = state.recentPicks.pop()\n // state.recentPickIds.delete(last.id)\n // }\n}\n\nexport const selectCurrentIndex = (state) => {\n return selectIndex(state, state.focusedIndex)\n}\n\n// TODO when user types letters -> no need to query provider again -> just filter existing results\nexport const handleInput = async (state, value, cursorOffset) => {\n if (state.value === value) {\n return state\n }\n const newPicks = await state.provider.getPicks(value)\n const filterValue = state.provider.getFilterValue(value)\n const items = getFilteredItems(state, newPicks, filterValue)\n const focusedIndex = items.length === 0 ? -1 : 0\n return {\n ...state,\n value,\n picks: newPicks,\n items,\n focusedIndex,\n cursorOffset,\n }\n}\n\nconst getNewValueInsertText = (value, data, selectionStart, selectionEnd) => {\n if (selectionStart === value.length) {\n const newValue = value + data\n return {\n newValue,\n cursorOffset: newValue.length,\n }\n }\n const before = value.slice(0, selectionStart)\n const after = value.slice(selectionEnd)\n const newValue = before + data + after\n return {\n newValue,\n cursorOffset: selectionStart + data.length,\n }\n}\n\nconst getNewValueDeleteContentBackward = (\n value,\n selectionStart,\n selectionEnd\n) => {\n const after = value.slice(selectionEnd)\n if (selectionStart === selectionEnd) {\n const before = value.slice(0, selectionStart - 1)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: before.length,\n }\n }\n const before = value.slice(0, selectionStart)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: selectionStart,\n }\n}\n\nconst RE_ALPHA_NUMERIC = /[a-z\\d]/i\n\nconst isAlphaNumeric = (character) => {\n return RE_ALPHA_NUMERIC.test(character)\n}\n\nconst getNewValueDeleteWordBackward = (value, selectionStart, selectionEnd) => {\n const after = value.slice(selectionEnd)\n if (selectionStart === selectionEnd) {\n let startIndex = Math.max(selectionStart - 1, 0)\n while (startIndex > 0 && isAlphaNumeric(value[startIndex])) {\n startIndex--\n }\n const before = value.slice(0, startIndex)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: before.length,\n }\n }\n const before = value.slice(0, selectionStart)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: selectionStart,\n }\n}\n\nconst getNewValueDeleteContentForward = (\n value,\n selectionStart,\n selectionEnd\n) => {\n const before = value.slice(0, selectionStart)\n if (selectionStart === selectionEnd) {\n const after = value.slice(selectionEnd + 1)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: selectionStart,\n }\n }\n const after = value.slice(selectionEnd)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: selectionStart,\n }\n}\n\nconst getNewValueDeleteWordForward = (value, selectionStart, selectionEnd) => {\n const before = value.slice(0, selectionStart)\n if (selectionStart === selectionEnd) {\n let startIndex = Math.min(selectionStart + 1, value.length - 1)\n while (startIndex < value.length && isAlphaNumeric(value[startIndex])) {\n startIndex++\n }\n const after = value.slice(startIndex)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: before.length,\n }\n }\n const after = value.slice(selectionEnd)\n const newValue = before + after\n return {\n newValue,\n cursorOffset: selectionStart,\n }\n}\n\nconst getNewValue = (value, inputType, data, selectionStart, selectionEnd) => {\n switch (inputType) {\n case InputEventType.InsertText:\n return getNewValueInsertText(value, data, selectionStart, selectionEnd)\n case InputEventType.DeleteContentBackward:\n return getNewValueDeleteContentBackward(\n value,\n selectionStart,\n selectionEnd\n )\n case InputEventType.DeleteContentForward:\n return getNewValueDeleteContentForward(\n value,\n selectionStart,\n selectionEnd\n )\n case InputEventType.DeleteWordForward:\n return getNewValueDeleteWordForward(value, selectionStart, selectionEnd)\n case InputEventType.DeleteWordBackward:\n return getNewValueDeleteWordBackward(value, selectionStart, selectionEnd)\n default:\n throw new Error(`unsupported input type ${inputType}`)\n }\n}\n\nexport const handleBeforeInput = (\n state,\n inputType,\n data,\n selectionStart,\n selectionEnd\n) => {\n Assert.string(inputType)\n Assert.number(selectionStart)\n Assert.number(selectionEnd)\n const { newValue, cursorOffset } = getNewValue(\n state.value,\n inputType,\n data,\n selectionStart,\n selectionEnd\n )\n return handleInput(state, newValue, cursorOffset)\n}\n\n// TODO use reactive Programming\n// https://angular-2-training-book.rangle.io/http/search_with_switchmap\n\n// searchField.valuesChanges.debounceTime(400).switchMap(term => search(term)).subscribe(result => {\n// sendRendererProcess(result)\n// })\n// merge(openStream, closeStream, updateStream).switchMap(state => {\n// switch(state){\n// case 'default':\n//\n// }\n//\n// })\n\nexport const setDeltaY = (state, deltaY) => {\n Assert.object(state)\n Assert.number(deltaY)\n const { itemHeight, items, height } = state\n const itemsLength = items.length\n if (deltaY < 0) {\n deltaY = 0\n } else if (deltaY > itemsLength * itemHeight - height) {\n deltaY = Math.max(itemsLength * itemHeight - height, 0)\n }\n if (state.deltaY === deltaY) {\n return state\n }\n const minLineY = Math.round(deltaY / itemHeight)\n const maxLineY = minLineY + Math.round(height / itemHeight)\n Assert.number(minLineY)\n Assert.number(maxLineY)\n return {\n ...state,\n deltaY,\n minLineY,\n maxLineY,\n }\n}\n\nexport const handleWheel = (state, deltaY) => {\n Assert.object(state)\n Assert.number(deltaY)\n return setDeltaY(state, state.deltaY + deltaY)\n}\n\nexport const hasFunctionalRender = true\n\nconst renderValue = {\n isEqual(oldState, newState) {\n return oldState.value === newState.value\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'setValue',\n /* value */ newState.value,\n ]\n },\n}\n\nconst renderCursorOffset = {\n isEqual(oldState, newState) {\n oldState.cursorOffset === newState.cursorOffset ||\n newState.cursorOffset === newState.value.length\n },\n apply(oldState, newState) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'setCursorOffset',\n /* cursorOffset */ newState.cursorOffset,\n ]\n },\n}\n\nconst getItemDomChanges = (oldState, newState) => {\n const oldItems = oldState.items\n const newItems = newState.items\n const length = oldItems.length\n const domChanges = []\n for (let i = 0; i < length; i++) {\n const oldItem = oldItems[i]\n const newItem = newItems[i]\n if (oldItem.icon && !newItem.icon) {\n domChanges.push({\n command: 'addIcon',\n icon: newItem.icon,\n index: i,\n })\n }\n }\n return domChanges\n}\n\nconst renderItems = {\n isEqual(oldState, newState) {\n return (\n oldState.items === newState.items &&\n oldState.minLineY === newState.minLineY &&\n oldState.maxLineY === newState.maxLineY\n )\n },\n apply(oldState, newState) {\n if (newState.items.length === 0) {\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'showNoResults',\n ]\n }\n console.log('minLineY', newState.minLineY)\n console.log('maxLineY', newState.maxLineY)\n const visibleItems = getVisible(\n newState.items,\n newState.minLineY,\n newState.maxLineY\n )\n console.log({ visibleItems, items: newState.items })\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'setVisiblePicks',\n /* visiblePicks */ visibleItems,\n ]\n },\n}\n\nconst renderFocusedIndex = {\n isEqual(oldState, newState) {\n return oldState.focusedIndex === newState.focusedIndex\n },\n apply(oldState, newState) {\n const oldFocusedIndex = oldState.focusedIndex - oldState.minLineY\n const newFocusedIndex = newState.focusedIndex - newState.minLineY\n console.log('focus', oldState.focusedIndex, newState.focusedIndex)\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'setFocusedIndex',\n /* oldFocusedIndex */ oldFocusedIndex,\n /* newFocusedIndex */ newFocusedIndex,\n ]\n },\n}\n\nconst renderHeight = {\n isEqual(oldState, newState) {\n return oldState.items.length === newState.items.length\n },\n apply(oldState, newState) {\n const maxLineY = Math.min(newState.maxLineY, newState.items.length)\n const itemCount = maxLineY - newState.minLineY\n const height = itemCount * newState.itemHeight\n return [\n /* Viewlet.send */ 'Viewlet.send',\n /* id */ 'QuickPick',\n /* method */ 'setItemsHeight',\n /* height */ height,\n ]\n },\n}\n\nexport const render = [\n renderItems,\n renderValue,\n renderCursorOffset,\n renderFocusedIndex,\n renderHeight,\n]\n", "export const focusIndex = async (state, index) => {\n const { provider, maxVisibleItems, items, minLineY, maxLineY } = state\n console.log('focus', index, minLineY, maxLineY)\n // TODO get types working\n // @ts-ignore\n if (provider.focusPick) {\n // @ts-ignore\n await provider.focusPick(items[index])\n }\n if (index < minLineY + 1) {\n const minLineY = index\n const maxLineY = Math.min(index + maxVisibleItems, items.length - 1)\n // TODO need to scroll up\n return {\n ...state,\n minLineY,\n maxLineY,\n focusedIndex: index,\n }\n }\n if (index >= maxLineY - 1) {\n // TODO need to scroll down\n const maxLineY = index + 1\n const minLineY = maxLineY - maxVisibleItems\n console.log('scroll down', { index, maxLineY, maxVisibleItems, minLineY })\n return {\n ...state,\n minLineY,\n maxLineY,\n focusedIndex: index,\n }\n }\n return {\n ...state,\n focusedIndex: index,\n }\n}\n", "import { focusIndex } from './ViewletQuickPickFocusIndex.js'\n\nexport const focusFirst = (state) => {\n return focusIndex(state, 0)\n}\n", "import { focusIndex } from './ViewletQuickPickFocusIndex.js'\n\nexport const focusLast = (state) => {\n return focusIndex(state, state.items.length - 1)\n}\n", "import { focusIndex } from './ViewletQuickPickFocusIndex.js'\n\nexport const focusNext = (state) => {\n const nextIndex = (state.focusedIndex + 1) % state.items.length\n return focusIndex(state, nextIndex)\n}\n", "import { focusIndex } from './ViewletQuickPickFocusIndex.js'\n\nexport const focusPrevious = (state) => {\n const previousIndex =\n state.focusedIndex === 0 ? state.items.length - 1 : state.focusedIndex - 1\n return focusIndex(state, previousIndex)\n}\n", "import * as ViewletQuickPick from './ViewletQuickPick.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as LazyCommand from '../LazyCommand/LazyCommand.js'\n\n// prettier-ignore\nconst Imports = {\n FocusFirst: () => import('./ViewletQuickPickFocusFirst.js'),\n FocusIndex: () => import('./ViewletQuickPickFocusIndex.js'),\n FocusLast: () => import('./ViewletQuickPickFocusLast.js'),\n FocusNext: () => import('./ViewletQuickPickFocusNext.js'),\n FocusPrevious: () => import('./ViewletQuickPickFocusPrevious.js'),\n}\n\n// prettier-ignore\nexport const Commands = {\n 'QuickPick.focusFirst': LazyCommand.create('QuickPick', Imports.FocusFirst, 'focusFirst'),\n 'QuickPick.focusIndex': LazyCommand.create('QuickPick', Imports.FocusIndex, 'focusIndex'),\n 'QuickPick.focusLast': LazyCommand.create('QuickPick', Imports.FocusLast, 'focusLast'),\n 'QuickPick.focusNext': LazyCommand.create('QuickPick', Imports.FocusNext, 'focusNext'),\n 'QuickPick.focusPrevious': LazyCommand.create('QuickPick', Imports.FocusPrevious, 'focusPrevious'),\n 'QuickPick.handleBeforeInput': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.handleBeforeInput),\n 'QuickPick.handleBlur': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.handleBlur),\n 'QuickPick.handleInput': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.handleInput),\n 'QuickPick.handleWheel': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.handleWheel),\n 'QuickPick.selectCurrentIndex': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.selectCurrentIndex),\n 'QuickPick.selectIndex': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.selectIndex),\n 'QuickPick.selectItem': Viewlet.wrapViewletCommand('QuickPick', ViewletQuickPick.selectItem),\n}\n\nexport * from './ViewletQuickPick.js'\n", "import * as ViewletModuleId from '../ViewletModuleId/ViewletModuleId.js'\n\nexport const load = (moduleId) => {\n switch (moduleId) {\n case ViewletModuleId.Explorer:\n return import('../ViewletExplorer/ViewletExplorer.ipc.js')\n case ViewletModuleId.RunAndDebug:\n return import('../ViewletRunAndDebug/ViewletRunAndDebug.ipc.js')\n case ViewletModuleId.Search:\n return import('../ViewletSearch/ViewletSearch.ipc.js')\n case ViewletModuleId.SourceControl:\n return import('../ViewletSourceControl/ViewletSourceControl.ipc.js')\n case ViewletModuleId.Terminal:\n return import('../ViewletTerminal/ViewletTerminal.ipc.js')\n case ViewletModuleId.DebugConsole:\n return import('../ViewletDebugConsole/ViewletDebugConsole.ipc.js')\n case ViewletModuleId.Extensions:\n return import('../ViewletExtensions/ViewletExtensions.ipc.js')\n case ViewletModuleId.Output:\n return import('../ViewletOutput/ViewletOutput.ipc.js')\n case ViewletModuleId.Problems:\n return import('../ViewletProblems/ViewletProblems.ipc.js')\n case ViewletModuleId.Noop:\n return import('../ViewletNoop/ViewletNoop.ipc.js')\n case ViewletModuleId.EditorText:\n return import('../ViewletEditorText/ViewletEditorText.ipc.js')\n case ViewletModuleId.EditorPlainText:\n return import('../ViewletEditorPlainText/ViewletEditorPlainText.ipc.js')\n case ViewletModuleId.EditorImage:\n return import('../ViewletEditorImage/ViewletEditorImage.ipc.js')\n case ViewletModuleId.Clock:\n return import('../ViewletClock/ViewletClock.ipc.js')\n case ViewletModuleId.ActivityBar:\n return import('../ViewletActivityBar/ViewletActivityBar.ipc.js')\n case ViewletModuleId.Panel:\n return import('../ViewletPanel/ViewletPanel.ipc.js')\n case ViewletModuleId.SideBar:\n return import('../ViewletSideBar/ViewletSideBar.ipc.js')\n case ViewletModuleId.TitleBar:\n return import('../ViewletTitleBar/ViewletTitleBar.ipc.js')\n case ViewletModuleId.StatusBar:\n return import('../ViewletStatusBar/ViewletStatusBar.ipc.js')\n case ViewletModuleId.Main:\n return import('../ViewletMain/ViewletMain.ipc.js')\n case ViewletModuleId.EditorCompletion:\n return import('../ViewletEditorCompletion/ViewletEditorCompletion.ipc.js')\n case ViewletModuleId.References:\n return import('../ViewletReferences/ViewletReferences.ipc.js')\n case ViewletModuleId.Implementations:\n return import('../ViewletImplementations/ViewletImplementations.ipc.js')\n case ViewletModuleId.QuickPick:\n return import('../ViewletQuickPick/ViewletQuickPick.ipc.js')\n default:\n throw new Error(`unknown module \"${moduleId}\"`)\n }\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Assert from '../Assert/Assert.js'\nimport { CancelationError } from '../Errors/CancelationError.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Command from '../Command/Command.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n\nconst ViewletState = {\n Default: 0,\n ModuleLoaded: 1,\n ContentLoaded: 2,\n RendererProcessViewletLoaded: 3,\n ContentRendered: 4,\n Appended: 5,\n}\n\n/**\n *\n * @param {()=>any} getModule\n * @returns\n */\nexport const create = (\n getModule,\n id,\n parentId,\n uri,\n left,\n top,\n width,\n height\n) => {\n Assert.fn(getModule)\n Assert.string(id)\n Assert.string(parentId)\n Assert.string(uri)\n Assert.number(left)\n Assert.number(top)\n Assert.number(width)\n Assert.number(height)\n return {\n type: 0,\n getModule,\n id,\n parentId,\n uri,\n left,\n top,\n width,\n height,\n }\n}\n\n// TODO add lots of unit tests for this\n/**\n *\n * @param {{getModule:()=>any, type:number, id:string, disposed:boolean }} viewlet\n * @returns\n */\nexport const load = async (viewlet, focus = false) => {\n // console.time(`load/${viewlet.id}`)\n if (viewlet.type !== 0) {\n console.log('viewlet must be empty')\n throw new Error('viewlet must be empty')\n }\n let state = ViewletState.Default\n let module\n try {\n viewlet.type = 1\n if (viewlet.disposed) {\n return\n }\n\n module = await viewlet.getModule(viewlet.id)\n if (viewlet.disposed) {\n return\n }\n if (module.Commands) {\n for (const [key, value] of Object.entries(module.Commands)) {\n Command.register(key, value)\n }\n }\n state = ViewletState.ModuleLoaded\n const viewletState = module.create(\n viewlet.id,\n viewlet.uri,\n viewlet.left,\n viewlet.top,\n viewlet.width,\n viewlet.height\n )\n\n const oldVersion =\n viewletState.version === undefined ? undefined : ++viewletState.version\n let newState = await module.loadContent(viewletState)\n if (focus && module.focus) {\n newState = await module.focus(newState)\n }\n if (viewletState.version !== oldVersion) {\n newState = viewletState\n console.log('version mismatch')\n // TODO not sure if Object.assign is a good idea\n // Object.assign(viewletState, newState)\n }\n if (viewlet.disposed) {\n return\n }\n state = ViewletState.ContentLoaded\n\n if (viewlet.show === false) {\n await RendererProcess.invoke(\n /* Viewlet.load */ 'Viewlet.loadModule',\n /* id */ viewlet.id\n )\n } else {\n await RendererProcess.invoke(\n /* Viewlet.load */ 'Viewlet.load',\n /* id */ viewlet.id\n )\n }\n if (viewlet.disposed) {\n // TODO unload the module from renderer process\n return\n }\n // TODO race condition: viewlet state may have been updated again in the mean time\n state = ViewletState.RendererProcessViewletLoaded\n\n outer: if (module.shouldApplyNewState) {\n for (let i = 0; i < 2; i++) {\n if (module.shouldApplyNewState(newState)) {\n ViewletStates.set(viewlet.id, {\n state: newState,\n factory: module,\n })\n break outer\n }\n newState = await module.loadContent(viewletState)\n }\n throw new Error('viewlet could not be updated')\n } else {\n ViewletStates.set(viewlet.id, {\n state: newState,\n factory: module,\n })\n }\n\n if (viewletState !== newState) {\n await module.contentLoaded(newState)\n }\n\n if (module.hasFunctionalRender) {\n let commands = []\n if (Array.isArray(module.render)) {\n for (const item of module.render) {\n if (!item.isEqual(viewletState, newState)) {\n commands.push(item.apply(viewletState, newState))\n }\n }\n } else {\n commands = module.render(viewletState, newState)\n }\n if (viewlet.show === false) {\n return [\n ['Viewlet.create', viewlet.id],\n ...commands,\n ['Viewlet.show', viewlet.id],\n ]\n }\n await RendererProcess.invoke(\n /* Viewlet.sendMultiple */ 'Viewlet.sendMultiple',\n /* commands */ commands\n )\n }\n\n if (module.contentLoadedEffects) {\n module.contentLoadedEffects(newState)\n }\n if (viewlet.disposed) {\n // TODO unload the module from renderer process\n return\n }\n state = ViewletState.ContentRendered\n if (viewlet.parentId) {\n await RendererProcess.invoke(\n /* Viewlet.append */ 'Viewlet.appendViewlet',\n /* parentId */ viewlet.parentId,\n /* id */ viewlet.id,\n /* focus */ focus\n )\n }\n state = ViewletState.Appended\n\n // TODO race condition\n // outer: if (module.shouldApplyNewState) {\n // for (let i = 0; i < 2; i++) {\n // if (module.shouldApplyNewState(newState)) {\n // Viewlet.state.instances[viewlet.id] = {\n // state: newState,\n // factory: module,\n // }\n // break outer\n // }\n // newState = await module.loadContent(viewletState)\n // }\n // throw new Error('viewlet could not be updated')\n // }\n\n if (module.events) {\n // TODO remove event listeners when viewlet is disposed\n for (const [key, value] of Object.entries(module.events)) {\n const handleUpdate = async () => {\n const instance = ViewletStates.getInstance(viewlet.id)\n const newState = await value(instance.state)\n if (!module.shouldApplyNewState(newState)) {\n console.log('[viewlet manager] return', newState)\n\n return\n }\n const commands = render(instance.factory, instance.state, newState)\n instance.state = newState\n await RendererProcess.invoke(\n /* Viewlet.sendMultiple */ 'Viewlet.sendMultiple',\n /* commands */ commands\n )\n }\n GlobalEventBus.addListener(key, handleUpdate)\n }\n }\n\n if (viewlet.disposed) {\n // TODO unload the module from renderer process\n return\n }\n } catch (error) {\n if (error && error instanceof CancelationError) {\n return\n }\n viewlet.type = 4\n console.error(error)\n try {\n if (module && module.handleError) {\n return await module.handleError(error)\n }\n if (state < ViewletState.RendererProcessViewletLoaded) {\n await RendererProcess.invoke(\n /* Viewlet.load */ 'Viewlet.load',\n /* id */ viewlet.id\n )\n }\n if (state < ViewletState.Appended && viewlet.parentId) {\n await RendererProcess.invoke(\n /* Viewlet.append */ 'Viewlet.appendViewlet',\n /* parentId */ viewlet.parentId,\n /* id */ viewlet.id\n )\n }\n await RendererProcess.invoke(\n /* viewlet.handleError */ 'Viewlet.handleError',\n /* id */ viewlet.id,\n /* parentId */ viewlet.parentId,\n /* message */ `${error}`\n )\n } catch (error) {\n console.error(error)\n // this is really bad\n // probably can only show an alert at this point\n }\n }\n // console.timeEnd(`load/${viewlet.id}`)\n}\n\nexport const dispose = async (id) => {\n state[id].disposed = true\n delete Viewlet.state.instances[id]\n delete state[id]\n await RendererProcess.invoke(\n /* Viewlet.dispose */ 'Viewlet.dispose',\n /* id */ id\n )\n}\n\nexport const mutate = async (id, fn) => {\n // TODO handle race conditions here\n const viewletState = state[id]\n await fn(state)\n}\n\nexport const render = (module, oldState, newState) => {\n if (Array.isArray(module.render)) {\n const commands = []\n for (const item of module.render) {\n if (!item.isEqual(oldState, newState)) {\n commands.push(item.apply(oldState, newState))\n }\n }\n return commands\n }\n return module.render(oldState, newState)\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Command from '../Command/Command.js'\nimport * as Assert from '../Assert/Assert.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n\n/**\n * @deprecated\n */\nexport const focus = (id) => {\n // if(state.instances[id]){\n // }\n // console.log('focus', { id })\n // // TODO open if it is not already open\n // RendererProcess.send([/* viewletFocus */ 3027, /* id */ id])\n}\n// export const createOrFocus = async id=>{\n// const instance = state.instances[id] || await create(id)\n// }\n\n/**\n * @deprecated\n */\nexport const refreshInstance = async (instance, id) => {\n if (!instance) {\n return\n }\n if (instance.status === 'refreshing' || instance.status === 'disposed') {\n return\n }\n instance.status = 'refreshing'\n try {\n await instance.factory.refresh(instance.state)\n } catch (error) {\n if (instance.factory.handleError) {\n try {\n await instance.factory.handleError(error)\n } catch (innerError) {\n console.error(innerError)\n console.error(error)\n return\n }\n }\n // TODO use ErrorHandling.handleError\n // TODO show notification maybe\n console.error(error)\n instance.status = 'error'\n return\n }\n instance.status = 'refreshed'\n}\n\n// TODO should refresh instance?\n/**\n * @deprecated\n */\nexport const refresh = async (id) => {\n const instance = ViewletStates.getInstance(id)\n if (!instance) {\n return\n }\n await refreshInstance(instance, id)\n}\n\n/**\n * @deprecated\n */\nexport const send = (id, method, ...args) => {\n const instance = ViewletStates.getInstance(id)\n if (!instance) {\n console.info('instance disposed', { id, method, args })\n return\n }\n const fn = instance.factory[method]\n Assert.fn(fn)\n fn(instance.state, ...args)\n}\n\n/**\n * @deprecated\n */\nexport const dispose = async (id) => {\n if (!id) {\n console.warn('no instance to dispose')\n return\n }\n const instance = ViewletStates.getInstance(id)\n if (!instance) {\n console.info('instance may already be disposed')\n return\n }\n // TODO status should have enum\n instance.status = 'disposing'\n try {\n if (!instance.factory) {\n throw new Error(`${id} is missing a factory function`)\n }\n instance.factory.dispose(instance.state)\n await RendererProcess.invoke(\n /* Viewlet.dispose */ 'Viewlet.dispose',\n /* id */ id\n )\n } catch (error) {\n console.error(error)\n // TODO use Error.cause once proper stack traces are supported by chrome\n throw new Error(`Failed to dispose viewlet ${id}: ${error}`)\n }\n instance.status = 'disposed'\n ViewletStates.remove(id)\n await GlobalEventBus.emitEvent(`Viewlet.dispose.${id}`)\n}\n\n/**\n * @deprecated\n */\nexport const replace = () => {}\n\n// TODO maybe wrapViewletCommand should accept module instead of id string\n// then check if instance.factory matches module -> only compare reference (int) instead of string\n// should be faster\nexport const wrapViewletCommand = (id, fn) => {\n const wrappedViewletCommand = async (...args) => {\n // TODO get actual focused instance\n const activeInstance = ViewletStates.getInstance(id)\n if (!activeInstance) {\n console.info(\n `cannot execute viewlet command ${id}.${fn.name}: no active instance for ${id}`\n )\n return\n }\n if (activeInstance.factory && activeInstance.factory.hasFunctionalRender) {\n const oldState = activeInstance.state\n const newState = await fn(oldState, ...args)\n if (!newState) {\n console.log({ fn })\n }\n Assert.object(newState)\n // console.log({ fn, newState })\n if (oldState === newState) {\n return\n }\n const commands = ViewletManager.render(\n activeInstance.factory,\n oldState,\n newState\n )\n ViewletStates.setState(id, newState)\n await RendererProcess.invoke(\n /* Viewlet.sendMultiple */ 'Viewlet.sendMultiple',\n /* commands */ commands\n )\n } else {\n return fn(activeInstance.state, ...args)\n }\n }\n\n return wrappedViewletCommand\n}\n\nexport const resize = (id, dimensions) => {\n const instance = ViewletStates.getInstance(id)\n if (!instance || !instance.factory || !instance.factory.resize) {\n console.warn('cannot resize', id)\n return []\n }\n const oldState = instance.state\n let newState\n let commands\n if (instance.factory.hasFunctionalResize) {\n newState = instance.factory.resize(oldState, dimensions)\n if ('newState' in newState) {\n throw new Error(\n `functional resize not supported in ${instance.factory.name}`\n )\n }\n commands = ViewletManager.render(instance.factory, instance.state, newState)\n } else {\n const result = instance.factory.resize(oldState, dimensions)\n newState = result.newState\n commands = result.commands\n }\n Assert.object(newState)\n Assert.array(commands)\n ViewletStates.setState(id, newState)\n return commands\n}\n\nexport const getState = (id) => {\n const instance = ViewletStates.getInstance(id)\n return instance.state\n}\n\nexport const setState = async (id, newState) => {\n const instance = ViewletStates.getInstance(id)\n if (instance && instance.factory && instance.factory.hasFunctionalRender) {\n const oldState = instance.state\n const commands = ViewletManager.render(instance.factory, oldState, newState)\n instance.state = newState\n await RendererProcess.invoke(\n /* Viewlet.sendMultiple */ 'Viewlet.sendMultiple',\n /* commands */ commands\n )\n }\n}\n\nexport const getAllStates = () => {\n const states = Object.create(null)\n for (const [key, value] of Object.entries(ViewletStates.getAllInstances())) {\n states[key] = value.state\n }\n return states\n}\n\nexport const openWidget = async (id, ...args) => {\n const hasInstance = ViewletStates.hasInstance(id)\n const type = args[0]\n const commands = await ViewletManager.load({\n getModule: ViewletModule.load,\n id,\n type: 0,\n uri: `quickPick://${type}`,\n show: false,\n focus: true,\n })\n\n if (hasInstance) {\n commands.unshift(['Viewlet.dispose', id])\n }\n await RendererProcess.invoke('Viewlet.executeCommands', commands)\n // TODO commands should be like this\n // viewlet.create quickpick\n // quickpick.setItems\n // quickpick.setFocusedIndex\n // quickpick.setValue\n // viewlet.show quickpick\n //\n}\n\nexport const closeWidget = async (id) => {\n ViewletStates.remove(id)\n await RendererProcess.invoke(\n /* Viewlet.dispose */ 'Viewlet.dispose',\n /* id */ id\n )\n}\n", "import * as Command from '../Command/Command.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as Viewlet from '../Viewlet/Viewlet.js'\nimport * as ViewletManager from '../ViewletManager/ViewletManager.js'\nimport * as ViewletModule from '../ViewletModule/ViewletModule.js'\n// TODO where to force rendering of contents (need to call sidebar.openViewlet somewhere)\n\nexport const state = {\n activityBarLeft: 0,\n activityBarTop: 0,\n activityBarWidth: 48,\n activityBarHeight: 0,\n activityBarVisible: true,\n mainLeft: 0,\n mainTop: 0,\n mainWidth: 0,\n mainHeight: 0,\n mainVisible: true,\n panelLeft: 0,\n panelTop: 0,\n panelWidth: 0,\n panelHeight: 160,\n panelVisible: false,\n sideBarLeft: 0,\n sideBarTop: 0,\n sideBarWidth: 240,\n sideBarHeight: 0,\n sideBarVisible: true,\n statusBarLeft: 0,\n statusBarTop: 0,\n statusBarWidth: 0,\n statusBarHeight: 0,\n statusBarVisible: true,\n titleBarLeft: 0,\n titleBarTop: 0,\n titleBarWidth: 0,\n titleBarHeight: 0,\n titleBarVisible: true,\n windowWidth: 0,\n windowHeight: 0,\n sashId: '',\n}\n\nconst SIDE_BAR_MIN_WIDTH = 170\nconst SIDE_BAR_MAX_WIDTH = Number.POSITIVE_INFINITY\nconst PANEL_MIN_HEIGHT = 150\nconst PANEL_MAX_HEIGHT = 600\n\nconst clamp = (min, max, value) => {\n if (value < min) {\n return min\n }\n if (value > max) {\n return max\n }\n return value\n}\n\nexport const getPoints = (layout, bounds) => {\n const windowWidth = bounds.windowWidth\n const windowHeight = bounds.windowHeight\n const titleBarHeight = bounds.titleBarHeight || 20\n\n const activityBarVisible = layout.activityBarVisible\n const panelVisible = layout.panelVisible\n const sideBarVisible = layout.sideBarVisible\n const statusBarVisible = layout.statusBarVisible\n const titleBarVisible = layout.titleBarVisible\n\n const activityBarWidth = 48 // TODO put magic numbers somewhere\n const sideBarWidth = clamp(\n SIDE_BAR_MIN_WIDTH,\n SIDE_BAR_MAX_WIDTH,\n layout.sideBarWidth\n )\n\n const panelHeight = clamp(\n PANEL_MIN_HEIGHT,\n PANEL_MAX_HEIGHT,\n layout.panelHeight\n ) // TODO check that it is in bounds of window\n const statusBarHeight = 20\n\n const p1 = /* Top */ 0\n let p2 = /* End of Title Bar */ 0\n let p3 = /* End of Main */ 0\n let p4 = /* End of Panel */ 0\n const p5 = /* End of StatusBar */ windowHeight\n\n const p6 = /* Left */ 0\n let p7 = /* End of Main */ windowWidth - activityBarWidth\n let p8 = /* End of SideBar */ windowWidth\n const p9 = /* End of ActivityBar */ windowWidth\n if (titleBarVisible) {\n p2 = titleBarHeight\n }\n if (statusBarVisible) {\n p4 = windowHeight - statusBarHeight\n }\n p3 = panelVisible ? p4 - panelHeight : p4\n if (activityBarVisible) {\n p8 = windowWidth - activityBarWidth\n }\n if (sideBarVisible) {\n p7 = p8 - sideBarWidth\n }\n return {\n activityBarLeft: p8,\n activityBarTop: p2,\n activityBarWidth: 48,\n activityBarHeight: p4 - p2,\n activityBarVisible,\n mainLeft: p6,\n mainTop: p2,\n mainWidth: p7 - p6,\n mainHeight: p3 - p2,\n mainVisible: true,\n panelLeft: p6,\n panelTop: p3,\n panelWidth: p8 - p6,\n panelHeight: p4 - p3,\n panelVisible,\n sideBarLeft: p7,\n sideBarTop: p2,\n sideBarWidth: p8 - p7,\n sideBarHeight: p3 - p2,\n sideBarVisible,\n statusBarLeft: p1,\n statusBarTop: p4,\n statusBarWidth: windowWidth,\n statusBarHeight: 20,\n statusBarVisible,\n titleBarLeft: p6,\n titleBarTop: p1,\n titleBarWidth: windowWidth,\n titleBarHeight,\n titleBarVisible: true,\n windowWidth,\n windowHeight,\n }\n}\n\nexport const updateLayout = async (layout) => {\n const points = getPoints(layout, state)\n Object.assign(state, points)\n RendererProcess.invoke(\n /* Layout.update */ 'Layout.update',\n /* points */ points\n )\n await Command.execute(\n /* LocalStorage.setJson */ 'LocalStorage.setJson',\n /* key */ 'layout',\n /* value */ state\n )\n}\n\nconst getDimensions = (state, id) => {\n switch (id) {\n case 'Main':\n return {\n top: state.mainTop,\n left: state.mainLeft,\n width: state.mainWidth,\n height: state.mainHeight,\n }\n case 'SideBar':\n return {\n top: state.sideBarTop,\n left: state.sideBarLeft,\n width: state.sideBarWidth,\n height: state.sideBarHeight,\n }\n case 'TitleBar':\n return {\n top: state.titleBarTop,\n left: state.titleBarLeft,\n width: state.titleBarWidth,\n height: state.titleBarHeight,\n }\n case 'Panel':\n return {\n top: state.panelTop,\n left: state.panelLeft,\n width: state.panelWidth,\n height: state.panelHeight,\n }\n case 'StatusBar':\n return {\n top: state.statusBarTop,\n left: state.statusBarLeft,\n width: state.statusBarWidth,\n height: state.statusBarHeight,\n }\n case 'ActivityBar':\n return {\n top: state.activityBarTop,\n left: state.activityBarLeft,\n width: state.activityBarWidth,\n height: state.activityBarHeight,\n }\n default:\n throw new Error('unexpected component')\n }\n}\n\nconst show = async (key, id) => {\n updateLayout({\n ...state,\n [key]: true,\n })\n const dimensions = getDimensions(state, id)\n const instance = ViewletManager.create(\n ViewletModule.load,\n id,\n '',\n 'builtin://',\n dimensions.left,\n dimensions.top,\n dimensions.width,\n dimensions.height\n )\n return ViewletManager.load(instance)\n}\n\nconst hide = async (key, id) => {\n updateLayout({\n ...state,\n [key]: false,\n })\n await Viewlet.dispose(id)\n}\n\nconst toggle = async (key, id) => {\n await (state[key] ? hide(key, id) : show(key, id))\n}\n\n// TODO replace with one method in renderer process: setSideBarVisibility(true|false)\nexport const showSideBar = async () => {\n await show('sideBarVisible', 'SideBar')\n}\n\nexport const hideSideBar = async () => {\n await hide('sideBarVisible', 'SideBar')\n}\n\nexport const toggleSideBar = async () => {\n await toggle('sideBarVisible', 'SideBar')\n}\n\n// TODO replace with one method in renderer process: setPanelVisible(true|false)\n\nexport const showPanel = async () => {\n await show('panelVisible', 'Panel')\n}\n\nexport const hidePanel = async () => {\n await hide('panelVisible', 'Panel')\n}\n\nexport const togglePanel = async () => {\n await toggle('panelVisible', 'Panel')\n}\n\nexport const showMain = async () => {\n await show('mainVisible', 'Main')\n}\n\nexport const togglePart = (partId) => {\n switch (partId) {\n case /* SideBar */ 1:\n toggleSideBar()\n break\n case /* Panel */ 2:\n togglePanel()\n break\n default:\n break\n }\n}\n\nexport const isPanelVisible = () => {\n return state.panelVisible\n}\n\nexport const isSideBarVisible = () => {\n return state.sideBarVisible\n}\n\nexport const isVisible = (partId) => {\n switch (partId) {\n case /* SideBar */ 1:\n return isSideBarVisible()\n case /* Panel */ 2:\n return isPanelVisible()\n default:\n return false\n }\n}\n\n// TODO replace with one method in renderer process: setActivityBarVisible(true|false)\n\nexport const showActivityBar = async () => {\n await show('activityBarVisible', 'ActivityBar')\n}\n\nexport const hideActivityBar = async () => {\n await hide('activityBarVisible', 'ActivityBar')\n}\n\nexport const toggleActivityBar = async () => {\n await toggle('activityBarVisible', 'ActivityBar')\n}\n\nexport const showStatusBar = async () => {\n await show('statusBarVisible', 'StatusBar')\n}\n\nexport const hideStatusBar = async () => {\n await hide('statusBarVisible', 'StatusBar')\n}\n\nexport const toggleStatusBar = async () => {\n await toggle('statusBarVisible', 'StatusBar')\n}\n\nexport const showTitleBar = async () => {\n await show('titleBarVisible', 'TitleBar')\n}\n\nexport const hideTitleBar = async () => {\n await hide('titleBarVisible', 'TitleBar')\n}\n\nexport const toggleTitleBar = async () => {\n await toggle('titleBarVisible', 'TitleBar')\n}\n\nconst getBounds = async () => {\n return RendererProcess.invoke(/* Layout.getBounds */ 'Layout.getBounds')\n}\n\nconst getInitialLayout = async () => {\n // TODO this is very similar to state\n const cachedLayout = await Command.execute(\n /* LocalStorage.getJson */ 'LocalStorage.getJson',\n /* key */ 'layout'\n )\n if (cachedLayout) {\n return cachedLayout\n }\n return state\n}\n\nexport const hydrate = async (initData) => {\n const windowBounds = initData.Layout.bounds\n const initialLayout = initData.layout ? JSON.parse(initData.layout) : state\n const points = getPoints(initialLayout, windowBounds)\n Object.assign(state, points)\n await RendererProcess.invoke(\n /* Layout.show */ 'Layout.show',\n /* points */ points\n )\n}\n\nconst isChild = (id) => {\n return (\n id === 'Main' ||\n id === 'SideBar' ||\n id === 'ActivityBar' ||\n id === 'Panel' ||\n id === 'TitleBar'\n )\n}\n\nexport const handleSashPointerDown = (id) => {\n state.sashId = id\n console.log({ id })\n}\n\n// TODO make this functional\nexport const handleSashPointerMove = async (x, y) => {\n if (state.sashId === 'SideBar') {\n const newSideBarWidth = state.windowWidth - state.activityBarWidth - x\n if (newSideBarWidth <= SIDE_BAR_MIN_WIDTH / 2) {\n state.sideBarVisible = false\n state.mainWidth = state.windowWidth - state.activityBarWidth\n } else if (newSideBarWidth <= SIDE_BAR_MIN_WIDTH) {\n state.sideBarVisible = true\n state.sideBarWidth = SIDE_BAR_MIN_WIDTH\n state.mainWidth =\n state.windowWidth - state.activityBarWidth - SIDE_BAR_MIN_WIDTH\n state.sideBarLeft =\n state.windowWidth - state.activityBarWidth - SIDE_BAR_MIN_WIDTH\n } else {\n state.sideBarVisible = true\n state.mainWidth = x\n state.sideBarLeft = x\n state.sideBarWidth = newSideBarWidth\n }\n } else if (state.sashId === 'Panel') {\n const newPanelHeight = state.windowHeight - state.statusBarHeight - y\n if (newPanelHeight < PANEL_MIN_HEIGHT / 2) {\n state.panelVisible = false\n state.mainHeight =\n state.windowHeight - state.statusBarHeight - state.titleBarHeight\n } else if (newPanelHeight <= PANEL_MIN_HEIGHT) {\n state.panelVisible = true\n state.panelHeight = PANEL_MIN_HEIGHT\n state.mainHeight =\n state.windowHeight - state.activityBarHeight - PANEL_MIN_HEIGHT\n } else {\n state.panelVisible = true\n state.mainHeight = y - state.titleBarHeight\n state.panelTop = y\n state.panelHeight = state.windowHeight - state.statusBarHeight - y\n }\n }\n\n await updateLayout(state)\n}\n\n// TODO a bit unnecessary to send the same layout very often, but it avoids keeping state in renderer process\nexport const handleResize = async (bounds) => {\n const points = getPoints(state, bounds)\n Object.assign(state, points)\n await RendererProcess.invoke(\n /* Layout.update */ 'Layout.update',\n /* points */ points\n )\n const ids = ['Main', 'ActivityBar', 'SideBar', 'TitleBar', 'StatusBar']\n const resizeInstance = (id) => {\n const dimensions = getDimensions(state, id)\n return Viewlet.resize(id, dimensions)\n }\n const commands = ids.flatMap(resizeInstance)\n if (commands.length === 0) {\n return\n }\n // TODO send the whole batch at once\n for (const command of commands) {\n RendererProcess.invoke(...command)\n }\n}\n", "import * as Command from '../Command/Command.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n// TODO lazyload menuEntries and use Command.execute (maybe)\nimport * as Layout from '../Layout/Layout.js'\nimport * as MenuEntries from '../MenuEntries/MenuEntries.js'\nimport * as MenuItemFlags from '../MenuItemFlags/MenuItemFlags.js'\n\nexport const state = {\n /**\n * @type {any[]}\n */\n menus: [],\n latestTimeStamp: 0,\n enterTimeout: -1,\n}\n\nconst MENU_WIDTH = 150\n\nconst CONTEXT_MENU_ITEM_HEIGHT = 28\nconst CONTEXT_MENU_SEPARATOR_HEIGHT = 6\nconst CONTEXT_MENU_PADDING = 20\nconst CONTEXT_MENU_WIDTH = 250\n\nexport const getMenuWidth = () => {\n return CONTEXT_MENU_WIDTH\n}\n\nexport const getMenuHeight = (items) => {\n let height = CONTEXT_MENU_PADDING\n for (const item of items) {\n switch (item.flags) {\n case /* ContextMenuItemSeparator */ 1:\n height += CONTEXT_MENU_SEPARATOR_HEIGHT\n break\n default:\n height += CONTEXT_MENU_ITEM_HEIGHT\n break\n }\n }\n return height\n}\n\nconst getCurrentMenu = () => {\n if (state.menus.length === 0) {\n console.warn('menu not available')\n }\n return state.menus.at(-1)\n}\n\nexport const addMenuInternal = (menu) => {\n if (state.menus.length > 5) {\n throw new Error('too many menus')\n }\n state.menus.push(menu)\n return menu\n}\n\nexport const addRootMenuInternal = (menu) => {\n state.menus = [menu]\n return menu\n}\n\nconst getMenuBounds = (x, y, items) => {\n const menuWidth = CONTEXT_MENU_WIDTH\n const menuHeight = getMenuHeight(items)\n\n const windowWidth = Layout.state.windowWidth\n const windowHeight = Layout.state.windowHeight\n // TODO maybe only send labels and keybindings to ui (id not needed on ui)\n // TODO what about separators?\n\n if (x + menuWidth > windowWidth) {\n x -= menuWidth\n }\n if (y + menuHeight > windowHeight) {\n y -= menuHeight\n }\n\n return {\n x,\n y,\n width: menuWidth,\n height: menuHeight,\n }\n}\n\nexport const show = async (x, y, id, mouseBlocking = false) => {\n const items = await MenuEntries.getMenuEntries(id)\n const bounds = getMenuBounds(x, y, items)\n const menu = addMenuInternal({\n id,\n items,\n focusedIndex: -1,\n level: state.menus.length,\n x: bounds.x,\n y: bounds.y,\n })\n await RendererProcess.invoke(\n /* Menu.show */ 'Menu.showMenu',\n /* x */ bounds.x,\n /* y */ bounds.y,\n /* width */ bounds.width,\n /* height */ bounds.height,\n /* items */ menu.items,\n /* level */ menu.level,\n /* parentIndex */ -1,\n /* mouseBlocking */ mouseBlocking\n )\n}\n\nexport const closeSubMenu = () => {\n const menu = state.menus.pop()\n const parentMenu = state.menus.at(-1)\n RendererProcess.invoke(\n /* Menu.hideSubMenu */ 7903,\n /* parentIndex */ parentMenu.focusedIndex\n )\n}\n\nconst showSubMenuAtEnter = async (level, index, enterX, enterY) => {\n // TODO delete old menus\n state.menus = state.menus.slice(0, level + 1)\n const parentMenu = state.menus[level]\n const item = parentMenu.items[index]\n const subMenuItems = await MenuEntries.getMenuEntries(item.id)\n const subMenu = addMenuInternal({\n id: item.id,\n items: subMenuItems,\n focusedIndex: -1,\n level: state.menus.length,\n y: parentMenu.y + index * 25,\n x: parentMenu.x + MENU_WIDTH,\n enterX,\n enterY,\n })\n const width = getMenuWidth()\n const height = getMenuHeight(subMenuItems)\n RendererProcess.invoke(\n /* Menu.showMenu */ 'Menu.showMenu',\n /* x */ subMenu.x,\n /* y */ subMenu.y,\n /* width */ width,\n /* height */ height,\n /* items */ subMenu.items,\n /* level */ subMenu.level,\n /* parentIndex */ index\n )\n}\n\nexport const showSubMenu = async (level, index) => {\n await showSubMenuAtEnter(level, index, -1, -1)\n}\n\nconst selectIndexNone = async (item) => {\n if (!item.command) {\n console.warn('item has missing command', item)\n return\n }\n const args = item.args || []\n await Promise.all([\n hide(/* restoreFocus */ false),\n Command.execute(item.command, ...args),\n ])\n}\n\nconst selectIndexRestoreFocus = async (item) => {\n if (!item.command) {\n console.warn('item has missing command', item)\n return\n }\n const args = item.args || []\n await Promise.all([\n hide(/* restoreFocus */ true),\n Command.execute(item.command, ...args),\n ])\n}\n\nconst selectIndexSubMenu = async (menu, index) => {\n if (menu.focusedIndex === index) {\n return\n }\n await showSubMenu(menu.level, menu.focusedIndex)\n}\n\nexport const selectIndex = async (level, index) => {\n const menu = state.menus[level]\n menu.focusedIndex = index\n const item = menu.items[menu.focusedIndex]\n switch (item.flags) {\n case MenuItemFlags.None:\n return selectIndexNone(item)\n case MenuItemFlags.SubMenu:\n return selectIndexSubMenu(menu, index)\n case MenuItemFlags.RestoreFocus:\n return selectIndexRestoreFocus(item)\n default:\n break\n }\n}\n\nexport const selectItem = (text) => {\n for (let level = 0; level < state.menus.length; level++) {\n const menu = state.menus[level]\n for (let i = 0; i < menu.items.length; i++) {\n const item = menu.items[i]\n if (item.label === text) {\n return selectIndex(level, i)\n }\n }\n }\n throw new Error(`menu item not found: ${text}`)\n}\n\nexport const selectCurrent = async (level) => {\n const menu = state.menus[level]\n await selectIndex(level, menu.focusedIndex)\n}\n\nexport const hide = async (restoreFocus = true) => {\n if (state.menus.length === 0) {\n return\n }\n state.menus = []\n await RendererProcess.invoke(\n /* Menu.hide */ 'Menu.hide',\n /* restoreFocus */ restoreFocus\n )\n}\n\n// TODO difference between focusing with mouse or keyboard\n// with mouse -> open submenu\n// with keyboard -> don't open submenu, only focus\n\nconst hideSubMenus = async (level) => {\n if (level < state.menus.length) {\n state.menus = state.menus.slice(0, level + 1)\n await RendererProcess.invoke(\n /* Menu.hideSubMenu */ 'Menu.hideSubMenu',\n /* level */ level + 1\n )\n }\n}\n\nconst MENU_DELAY_TRIANGLE = 300\n\nconst resolveAfterTimeout = (fn) => {\n setTimeout(fn, MENU_DELAY_TRIANGLE)\n}\n\nexport const handleMouseEnter = async (\n level,\n index,\n enterX,\n enterY,\n enterTimeStamp\n) => {\n state.latestTimeStamp = enterTimeStamp\n if (level >= state.menus.length) {\n return\n }\n const menu = state.menus[level]\n if (menu.focusedIndex === index) {\n return\n }\n if (level < state.menus.length - 1) {\n const subMenu = state.menus[level + 1]\n const subMenuEnterX = subMenu.enterX\n // TODO should check for triangle position here\n if (enterX >= subMenuEnterX) {\n await new Promise(resolveAfterTimeout)\n if (state.latestTimeStamp !== enterTimeStamp) {\n return\n }\n }\n }\n const item = menu.items[index]\n await focusIndex(menu, index)\n switch (item.flags) {\n case /* SubMenu */ 4:\n await showSubMenuAtEnter(menu.level, index, enterX, enterY)\n break\n default:\n await hideSubMenus(menu.level)\n break\n }\n}\n\nexport const handleMouseLeave = async () => {\n const menu = state.menus[0]\n if (menu.items.length === 0) {\n return\n }\n const oldFocusedIndex = menu.focusedIndex\n menu.focusedIndex = -1\n await RendererProcess.invoke(\n /* Menu.focusIndex */ 'Menu.focusIndex',\n /* level */ menu.level,\n /* oldFocusedIndex */ oldFocusedIndex,\n /* newFocusedIndex */ -1\n )\n}\n\nexport const focusIndex = async (menu, index) => {\n if (menu.items.length === 0) {\n return\n }\n const oldFocusedIndex = menu.focusedIndex\n menu.focusedIndex = index\n await RendererProcess.invoke(\n /* Menu.focusIndex */ 'Menu.focusIndex',\n /* level */ menu.level,\n /* oldFocusedIndex */ oldFocusedIndex,\n /* newFocusedIndex */ index\n )\n}\n\nexport const getIndexToFocusNextStartingAt = (items, startIndex) => {\n for (let i = startIndex; i < startIndex + items.length; i++) {\n const index = i % items.length\n const item = items[index]\n if (canBeFocused(item)) {\n return index\n }\n }\n console.log({ startIndex, items })\n return -1\n}\n\nexport const focusFirst = async () => {\n const menu = getCurrentMenu()\n if (menu.items.length === 0) {\n return\n }\n const indexToFocus = getIndexToFocusNextStartingAt(menu.items, 0)\n console.log({ first: indexToFocus })\n await focusIndex(menu, indexToFocus)\n}\n\nexport const focusLast = async () => {\n const menu = getCurrentMenu()\n const indexToFocus = getIndexToFocusPreviousStartingAt(\n menu.items,\n menu.items.length - 1\n )\n await focusIndex(menu, indexToFocus)\n}\n\n// TODO this code seems a bit too complicated, maybe it can be simplified\nconst getIndexToFocusPreviousStartingAt = (items, startIndex) => {\n for (let i = startIndex; i > startIndex - items.length; i--) {\n const index = (i + items.length) % items.length\n const item = items[index]\n if (canBeFocused(item)) {\n return index\n }\n }\n return -1\n}\n\nconst getIndexToFocusPrevious = (menu) => {\n const startIndex =\n menu.focusedIndex === -1 ? menu.items.length - 1 : menu.focusedIndex - 1\n return getIndexToFocusPreviousStartingAt(menu.items, startIndex)\n}\n\nexport const focusPrevious = async () => {\n const menu = getCurrentMenu()\n if (menu.items.length === 0) {\n return\n }\n const indexToFocus = getIndexToFocusPrevious(menu)\n await focusIndex(menu, indexToFocus)\n}\n\nconst canBeFocused = (item) => {\n switch (item.flags) {\n case MenuItemFlags.Separator:\n case MenuItemFlags.Disabled:\n return false\n default:\n return true\n }\n}\n\nconst getIndexToFocusNext = (menu) => {\n const startIndex = menu.focusedIndex + 1\n return getIndexToFocusNextStartingAt(menu.items, startIndex)\n}\n\nexport const focusNext = async () => {\n const menu = getCurrentMenu()\n if (menu.items.length === 0) {\n return\n }\n const indexToFocus = getIndexToFocusNext(menu)\n await focusIndex(menu, indexToFocus)\n}\n\nexport const resetFocusedIndex = (menu) => {\n menu.focusedIndex = -1\n}\n\n// TODO handle printable letter and focus item that starts with that letter\n\n// TODO pageup / pagedown keys\n\n// TODO more tests\n", "import * as Menu from '../Menu/Menu.js'\nimport * as Assert from '../Assert/Assert.js'\n\nexport const show = async (x, y, id) => {\n Assert.number(x)\n Assert.number(y)\n Assert.string(id)\n\n await Menu.hide()\n // TODO handle error\n // TODO race condition\n await Menu.show(x, y, id, /* mouseBlocking */ true)\n // TODO maybe only send labels and keybindings to ui (id not needed on ui)\n // TODO what about separators?\n}\n", "import * as ContextMenu from './ContextMenu.js'\n\nexport const Commands = {\n 'ContextMenu.show': ContextMenu.show,\n}\n", "const BYTE_UNITS = [\n \"B\",\n \"kB\",\n \"MB\",\n \"GB\",\n \"TB\",\n \"PB\",\n \"EB\",\n \"ZB\",\n \"YB\"\n];\nconst BIBYTE_UNITS = [\n \"B\",\n \"kiB\",\n \"MiB\",\n \"GiB\",\n \"TiB\",\n \"PiB\",\n \"EiB\",\n \"ZiB\",\n \"YiB\"\n];\nconst BIT_UNITS = [\n \"b\",\n \"kbit\",\n \"Mbit\",\n \"Gbit\",\n \"Tbit\",\n \"Pbit\",\n \"Ebit\",\n \"Zbit\",\n \"Ybit\"\n];\nconst BIBIT_UNITS = [\n \"b\",\n \"kibit\",\n \"Mibit\",\n \"Gibit\",\n \"Tibit\",\n \"Pibit\",\n \"Eibit\",\n \"Zibit\",\n \"Yibit\"\n];\nconst toLocaleString = (number, locale, options) => {\n let result = number;\n if (typeof locale === \"string\" || Array.isArray(locale)) {\n result = number.toLocaleString(locale, options);\n } else if (locale === true || options !== void 0) {\n result = number.toLocaleString(void 0, options);\n }\n return result;\n};\nfunction prettyBytes(number, options) {\n if (!Number.isFinite(number)) {\n throw new TypeError(`Expected a finite number, got ${typeof number}: ${number}`);\n }\n options = {\n bits: false,\n binary: false,\n ...options\n };\n const UNITS = options.bits ? options.binary ? BIBIT_UNITS : BIT_UNITS : options.binary ? BIBYTE_UNITS : BYTE_UNITS;\n if (options.signed && number === 0) {\n return ` 0 ${UNITS[0]}`;\n }\n const isNegative = number < 0;\n const prefix = isNegative ? \"-\" : options.signed ? \"+\" : \"\";\n if (isNegative) {\n number = -number;\n }\n let localeOptions;\n if (options.minimumFractionDigits !== void 0) {\n localeOptions = {minimumFractionDigits: options.minimumFractionDigits};\n }\n if (options.maximumFractionDigits !== void 0) {\n localeOptions = {maximumFractionDigits: options.maximumFractionDigits, ...localeOptions};\n }\n if (number < 1) {\n const numberString2 = toLocaleString(number, options.locale, localeOptions);\n return prefix + numberString2 + \" \" + UNITS[0];\n }\n const exponent = Math.min(Math.floor(options.binary ? Math.log(number) / Math.log(1024) : Math.log10(number) / 3), UNITS.length - 1);\n number /= (options.binary ? 1024 : 1e3) ** exponent;\n if (!localeOptions) {\n number = number.toPrecision(3);\n }\n const numberString = toLocaleString(Number(number), options.locale, localeOptions);\n const unit = UNITS[exponent];\n return prefix + numberString + \" \" + unit;\n}\nexport default prettyBytes;\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const open = async () => {\n await ElectronProcess.invoke('ElectronWindowProcessExplorer.open')\n}\n", "import prettyBytes from '../../../static/js/pretty-bytes.js'\nimport * as ColorTheme from '../ColorTheme/ColorTheme.js'\nimport * as Command from '../Command/Command.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as ElectronWindow from '../ElectronWindow/ElectronWindow.js'\nimport * as ElectronWindowProcessExplorer from '../ElectronWindowProcessExplorer/ElectronWindowProcessExplorer.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nconst formatBytes = (bytes) => {\n return prettyBytes(bytes)\n}\n\n// TODO vscode's version of this is shorter\n// if it is a bottleneck, check performance of this function (not very optimized now)\n\n// TODO no export, this is internal only\nconst toMarkdownTable = (header, rows) => {\n const numberOfColumns = header.length\n const numberOfRows = rows.length\n const maxLengths = [...new Array(numberOfColumns).fill(0)]\n for (let i = 0; i < numberOfColumns; i++) {\n maxLengths[i] = header[i].length\n for (let j = 0; j < numberOfRows; j++) {\n maxLengths[i] = Math.max(maxLengths[i], rows[j][i].length)\n }\n }\n let result = ''\n for (let i = 0; i < numberOfColumns; i++) {\n result += '|'\n result += ' '\n result += header[i]\n result += ' '.repeat(maxLengths[i] - header[i].length)\n result += ' '\n }\n result += '|\\n'\n for (let i = 0; i < numberOfColumns; i++) {\n result += '|'\n result += '-'.repeat(maxLengths[i] + 2)\n }\n result += '|\\n'\n for (const row of rows) {\n for (let i = 0; i < numberOfColumns; i++) {\n result += '|'\n result += ' '\n result += row[i]\n result += ' '.repeat(maxLengths[i] - row[i].length)\n result += ' '\n }\n result += '|\\n'\n }\n return result\n}\n\nconst formatStartupPerformanceEntries = (entries, firstTimeOrigin) => {\n const diff = entries.timeOrigin - firstTimeOrigin\n const header = ['Name', 'Start Time', 'Duration']\n const formatEntry = (entry) => {\n const name = entry.name\n if (!name) {\n return ['n/a', 'n/a', 'n/a']\n }\n const startTime = `${(entry.startTime + diff).toFixed(2)}ms`\n const duration = `${entry.duration.toFixed(2)}ms`\n return [name, startTime, duration]\n }\n const rows = entries.entries.map(formatEntry)\n return toMarkdownTable(header, rows)\n}\n\nconst formatWebVitals = (vitals) => {\n const header = ['Name', 'Start Time']\n const rows = vitals.map((entry) => {\n const name = entry.name\n const startTime = `${entry.startTime.toFixed(2)}ms`\n return [name, startTime]\n })\n return toMarkdownTable(header, rows)\n}\n\nconst getWebVitals = async () => {\n let firstPaint = -1\n let firstContentfulPaint = -1\n let largestContentfulPaint = -1\n const paintEntries = performance.getEntriesByType('paint')\n for (const paintEntry of paintEntries) {\n switch (paintEntry.name) {\n case 'first-paint':\n firstPaint = paintEntry.startTime\n break\n case 'first-contentful-paint':\n firstContentfulPaint = paintEntry.startTime\n break\n }\n }\n const performanceObserver = new PerformanceObserver(() => {})\n performanceObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true,\n })\n const records = performanceObserver.takeRecords()\n performanceObserver.disconnect()\n if (records.length > 0) {\n largestContentfulPaint = records[0].startTime\n }\n\n return [\n {\n name: 'first-paint',\n startTime: firstPaint,\n },\n {\n name: 'firstContentfulPaint',\n startTime: firstContentfulPaint,\n },\n {\n name: 'largestContentfulPaint',\n startTime: largestContentfulPaint,\n },\n ]\n}\n\nconst formatNodeTiming = (nodeStartupTiming) => {\n const header = ['Name', 'Value']\n const rows = Object.entries(nodeStartupTiming).map(([key, value]) => {\n if (typeof value === 'number' && value > 0) {\n return [key, `${value.toFixed(2)}ms`]\n }\n return [key, `${value}`]\n })\n return toMarkdownTable(header, rows)\n}\n\nconst getNodeTiming = () => {\n if (Platform.platform === PlatformType.Web) {\n return undefined\n }\n return SharedProcess.invoke(/* command */ 'Developer.getNodeStartupTime')\n}\n\nconst getFirstTimeOrigin = ({ measureEntries, electronEntries }) => {\n if (electronEntries) {\n return electronEntries.timeOrigin\n }\n if (measureEntries) {\n return measureEntries.timeOrigin\n }\n return 0\n}\n\nconst formatStartupPerformance = ({\n measureEntries,\n webVitals,\n nodeStartupTiming,\n electronEntries,\n}) => {\n const firstTimeOrigin = getFirstTimeOrigin({\n measureEntries,\n electronEntries,\n })\n const lines = []\n lines.push('# Startup Performance')\n lines.push('')\n if (electronEntries) {\n const formattedElectronEntries = formatStartupPerformanceEntries(\n electronEntries,\n firstTimeOrigin\n )\n lines.push('## main-process')\n lines.push('')\n lines.push(...formattedElectronEntries.split('\\n'))\n lines.push('')\n }\n if (measureEntries) {\n const formattedMeasureEntries = formatStartupPerformanceEntries(\n measureEntries,\n firstTimeOrigin\n )\n if (electronEntries) {\n const deltaTimeOrigin = (\n measureEntries.timeOrigin - electronEntries.timeOrigin\n ).toFixed(2)\n lines.push(`## renderer-worker (+${deltaTimeOrigin}ms)`)\n } else {\n lines.push('## renderer-worker')\n }\n lines.push('')\n lines.push(...formattedMeasureEntries.split('\\n'))\n lines.push('')\n }\n if (webVitals) {\n const formattedWebVitals = formatWebVitals(webVitals)\n lines.push('## Web Vitals')\n lines.push('')\n lines.push(...formattedWebVitals.split('\\n'))\n lines.push('')\n }\n if (nodeStartupTiming) {\n const formattedNodeStartupTiming = formatNodeTiming(nodeStartupTiming)\n lines.push('## Node Startup Timing')\n lines.push('')\n lines.push(...formattedNodeStartupTiming.split('\\n'))\n lines.push('')\n }\n lines.push('## Extension Host')\n lines.push('')\n const content = lines.join('\\n')\n return content\n}\n\nconst getMeasureEntries = () => {\n const measureEntries = performance.getEntriesByType('measure')\n const timeOrigin = performance.timeOrigin\n return {\n entries: measureEntries,\n timeOrigin,\n }\n}\n\nconst getElectronEntries = async () => {\n if (\n Platform.platform === PlatformType.Web ||\n Platform.platform === PlatformType.Remote\n ) {\n return undefined\n }\n const result = await SharedProcess.invoke(\n /* Electron.getPerformanceEntries */ 'Electron.getPerformanceEntries'\n )\n return result\n}\n\n// TODO should open file perf://startup-performance -> calls fs provider -> provides statistics\n// that would work well for restoring editor\nexport const getStartupPerformanceContent = async () => {\n // TODO how to update content once workbench startup has finished?\n // await new Promise((resolve) =>\n // LifeCycle.once(LifeCycle.PHASE_FIFTEEN, resolve)\n // )\n let nodeStartupTiming\n if (Platform.platform !== PlatformType.Web) {\n nodeStartupTiming = await getNodeTiming()\n }\n const measureEntries = getMeasureEntries()\n const webVitals = await getWebVitals()\n let electronEntries\n if (Platform.platform === 'electron') {\n electronEntries = await getElectronEntries()\n }\n const text = formatStartupPerformance({\n nodeStartupTiming,\n measureEntries,\n webVitals,\n electronEntries,\n })\n return text\n}\n\nexport const showStartupPerformance = async () => {\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ 'app://startup-performance'\n )\n}\n\nconst formatNodeMemoryUsage = (memoryUsage) => {\n if (!memoryUsage) {\n return ['']\n }\n const header = ['Name', 'Memory']\n const rows = Object.entries(memoryUsage).map(([key, value]) => {\n return [key, formatBytes(value)]\n })\n return toMarkdownTable(header, rows)\n}\n\nconst formatRendererWorkerData = ({\n memory,\n userAgentSpecificMemory,\n sent,\n received,\n}) => {\n let content = ''\n if (userAgentSpecificMemory) {\n const header = ['Name', 'Value']\n const rows = []\n if (userAgentSpecificMemory.bytes) {\n rows.push(['Bytes', formatBytes(userAgentSpecificMemory.bytes)])\n }\n if (userAgentSpecificMemory.breakdown) {\n for (const item of userAgentSpecificMemory.breakdown) {\n if (!item.bytes) {\n continue\n }\n rows.push([item.types[0] || 'n/a', formatBytes(item.bytes)])\n }\n }\n content += toMarkdownTable(header, rows)\n } else if (memory) {\n const header = ['Name', 'Value']\n const rows = [\n ['jsHeapSizeLimit', formatBytes(memory.jsHeapSizeLimit)],\n ['Total JS HeapSize', formatBytes(memory.totalJSHeapSize)],\n ['Used JS HeapSize', formatBytes(memory.usedJSHeapSize)],\n ['Sent', formatBytes(sent)],\n ['Received', formatBytes(received)],\n ]\n content += toMarkdownTable(header, rows)\n }\n return content\n}\n\nconst formatRendererProcessData = ({ memoryUsage }) => {\n if (!memoryUsage) {\n return 'No Information available.'\n }\n const header = ['Name', 'Value']\n const rows = [\n ['jsHeapSizeLimit', formatBytes(memoryUsage.jsHeapSizeLimit)],\n ['Total JS HeapSize', formatBytes(memoryUsage.totalJSHeapSize)],\n ['Used JS HeapSize', formatBytes(memoryUsage.usedJSHeapSize)],\n ]\n return toMarkdownTable(header, rows)\n}\n\nconst getRendererWorkerMemoryUsage = async () => {\n let userAgentSpecificMemory\n let memory\n // @ts-ignore\n if (performance && performance.memory) {\n // @ts-ignore\n memory = performance.memory\n }\n // @ts-ignore\n if (performance && performance.measureUserAgentSpecificMemory) {\n // @ts-ignore\n userAgentSpecificMemory = await performance.measureUserAgentSpecificMemory()\n }\n return {\n memory,\n userAgentSpecificMemory,\n }\n}\n\nconst getSharedProcessMemoryUsage = () => {\n return SharedProcess.invoke(\n /* Developer.sharedProcessMemoryUsage */ 'Developer.sharedProcessMemoryUsage'\n )\n}\n\nconst getRendererProcessMemoryUsage = async () => {\n const memoryUsage = await RendererProcess.invoke(\n /* Developer.getMemoryUsage */ 284\n )\n return memoryUsage\n}\n\nconst getExtensionHostMemoryUsage = async () => {\n return SharedProcess.invoke(\n /* ExtensionHost.getMemoryUsage */ 'ExtensionHost.getMemoryUsage'\n )\n}\n\n// TODO handle case when renderer process and renderer worker are same process communicating via messagePort\nexport const getMemoryUsageContent = async () => {\n const sharedProcessMemoryUsage = await getSharedProcessMemoryUsage()\n const formattedSharedProcessMemoryUsage = formatNodeMemoryUsage(\n sharedProcessMemoryUsage\n )\n const extensionHostMemoryUsage = await getExtensionHostMemoryUsage()\n const formattedExtensionHostMemoryUsage = formatNodeMemoryUsage(\n extensionHostMemoryUsage\n )\n const rendererWorkerMemoryUsage = await getRendererWorkerMemoryUsage()\n const totalSent = SharedProcess.state.totalSent\n const totalReceived = SharedProcess.state.totalReceived\n const formattedRendererWorkerMemoryUsage = formatRendererWorkerData({\n memory: rendererWorkerMemoryUsage.memory,\n userAgentSpecificMemory: rendererWorkerMemoryUsage.userAgentSpecificMemory,\n sent: totalSent,\n received: totalReceived,\n })\n const rendererProcessMemoryUsage = await getRendererProcessMemoryUsage()\n const formattedRendererProcessMemoryUsage = formatRendererProcessData({\n memoryUsage: rendererProcessMemoryUsage,\n })\n\n const isWorker = typeof WorkerGlobalScope !== 'undefined'\n const text = isWorker\n ? `## Shared Process\n\n${formattedSharedProcessMemoryUsage}\n\n## Extension Host\n\n${formattedExtensionHostMemoryUsage}\n\n## Renderer Worker\n\n${formattedRendererWorkerMemoryUsage}\n\n## Renderer Process\n\n${formattedRendererProcessMemoryUsage}\n`\n : `## Renderer Worker / Renderer Process\n\n${formattedRendererWorkerMemoryUsage}\n\n## Shared Process\n\n${formattedSharedProcessMemoryUsage}\n\n## Extension Host\n\n${formattedExtensionHostMemoryUsage}\n\n\n`\n return text\n}\n\nexport const showMemoryUsage = async () => {\n await Command.execute(\n /* Main.openUri */ 'Main.openUri',\n /* uri */ 'app://memory-usage'\n )\n}\n\n// TODO not sure if this function is useful\nexport const allocateMemoryInSharedProcess = async () => {\n await SharedProcess.invoke(\n /* Developer.allocateMemoryInSharedProcess */ 'Developer.allocateMemoryInSharedProcess'\n )\n}\n\nexport const crashSharedProcess = async () => {\n await SharedProcess.invoke(\n /* Developer.crashSharedProcess */ 'Developer.crashSharedProcess'\n )\n}\n\nexport const crashRendererProcess = () => {}\n\nexport const crashRendererWorker = () => {}\n\nexport const crashMainProcess = async () => {\n await SharedProcess.invoke(\n /* Electron.crashMainProcess */ 'Electron.crashMainProcess'\n )\n}\n\nexport const openExtensionsFolder = () => {\n // TODO only possible in local file system\n}\n\nexport const openLogsFolder = async () => {\n // TODO only in electron or in remote when it is the same machine\n if (Platform.platform === PlatformType.Web) {\n return\n }\n const logsFolder = await Platform.getLogsDir()\n await Command.execute(\n /* OpenNativeFolder.openNativeFolder */ 'OpenNativeFolder.openNativeFolder',\n /* path */ logsFolder\n )\n}\n\nexport const toggleDeveloperTools = () => {\n return ElectronWindow.toggleDevtools()\n}\n\nexport const showIconThemeCss = async () => {\n // const iconThemeCss = await IconTheme.getIconThemeCss()\n // Main.openRawText('css://icon-theme.css', iconThemeCss)\n}\n\nexport const createSharedProcessHeapSnapshot = async () => {\n await SharedProcess.invoke(\n /* Developer.createSharedProcessHeapSnapshot */ 'Developer.createSharedProcessHeapSnapshot'\n )\n}\n\nexport const createSharedProcessProfile = async () => {\n await SharedProcess.invoke(\n /* Developer.createProfile */ 'Developer.createProfile'\n )\n}\n\nexport const reloadIconTheme = async () => {\n await IconTheme.hydrate()\n}\n\nexport const reloadColorTheme = async () => {\n await ColorTheme.hydrate()\n}\n\nexport const showColorThemeCss = async () => {\n // @ts-ignore\n const colorThemeCss = await ColorTheme.getColorThemeCssCacheFirst()\n // @ts-ignore\n Main.openRawText('css://color-theme.css', colorThemeCss)\n}\n\nexport const clearCache = async () => {\n await Command.execute(/* CacheStorage.clearCache */ 'CacheStorage.clearCache')\n await Command.execute(/* LocalStorage.clear */ 'LocalStorage.clear')\n await Command.execute(/* SessionStorage.clear */ 'SessionStorage.clear')\n}\n\nexport const editors = {\n 'performance://monitor': {},\n 'performance://startup': {},\n}\n\nexport const openConfigFolder = async () => {\n const configFolder = await Platform.getConfigPath()\n await Command.execute(\n /* OpenNativeFolder.openNativeFolder */ 'OpenNativeFolder.openNativeFolder',\n /* path */ configFolder\n )\n}\n\nexport const openCacheFolder = async () => {\n const cacheFolder = await Platform.getCachePath()\n await Command.execute(\n /* OpenNativeFolder.openNativeFolder */ 'OpenNativeFolder.openNativeFolder',\n /* path */ cacheFolder\n )\n}\n\nexport const openDataFolder = async () => {\n const dataFolder = await SharedProcess.invoke(\n /* Platform.getDataDir */ 'Platform.getDataDir'\n )\n await Command.execute(\n /* OpenNativeFolder.openNativeFolder */ 'OpenNativeFolder.openNativeFolder',\n /* path */ dataFolder\n )\n}\n\nexport const showMessageBox = () => {}\n\nexport const openProcessExplorer = () => {\n return ElectronWindowProcessExplorer.open()\n}\n\nexport const downloadViewletState = async () => {\n const states = await Command.execute('Viewlet.getAllStates')\n await Command.execute(\n 'Download.downloadJson',\n /* json */ states,\n /* fileName */ 'viewlets.json'\n )\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Developer from './Developer.js'\n\n// prettier-ignore\nexport const Commands={\n 'Developer.allocateMemoryInSharedProcess': Developer.allocateMemoryInSharedProcess,\n 'Developer.clearCache': Developer.clearCache,\n 'Developer.crashMainProcess': Developer.crashMainProcess,\n 'Developer.crashSharedProcess': Developer.crashSharedProcess,\n 'Developer.createSharedProcessHeapSnapshot': Developer.createSharedProcessHeapSnapshot,\n 'Developer.createSharedProcessProfile': Developer.createSharedProcessProfile,\n 'Developer.downloadViewletState': Developer.downloadViewletState,\n 'Developer.getMemoryUsageContent': Developer.getMemoryUsageContent,\n 'Developer.getStartupPerformanceContent': Developer.getStartupPerformanceContent,\n 'Developer.openCacheFolder': Developer.openCacheFolder,\n 'Developer.openConfigFolder': Developer.openConfigFolder,\n 'Developer.openDataFolder': Developer.openDataFolder,\n 'Developer.openLogsFolder': Developer.openLogsFolder,\n 'Developer.openProcessExplorer': Developer.openProcessExplorer,\n 'Developer.reloadColorTheme': Developer.reloadColorTheme,\n 'Developer.reloadIconTheme': Developer.reloadIconTheme,\n 'Developer.showColorThemeCss': Developer.showColorThemeCss,\n 'Developer.showIconThemeCss': Developer.showIconThemeCss,\n 'Developer.showMemoryUsage': Developer.showMemoryUsage,\n 'Developer.showStartupPerformance': Developer.showStartupPerformance,\n 'Developer.startupPerformance': Developer.showStartupPerformance,\n 'Developer.toggleDeveloperTools': Developer.toggleDeveloperTools,\n // TODO certain commands are only available in electron -> treeshake them out\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const showOpenDialog = (title, properties) => {\n return ElectronProcess.invoke(\n 'ElectronDialog.showOpenDialog',\n title,\n properties\n )\n}\n\nexport const showMessageBox = (message, buttons) => {\n return ElectronProcess.invoke(\n 'ElectronDialog.showMessageBox',\n message,\n buttons\n )\n}\n", "import * as ElectronProcess from '../ElectronProcess/ElectronProcess.js'\n\nexport const open = async () => {\n await ElectronProcess.invoke('ElectronWindowAbout.open')\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ElectronDialog from '../ElectronDialog/ElectronDialog.js'\nimport * as ElectronWindowAbout from '../ElectronWindowAbout/ElectronWindowAbout.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nexport const state = {\n dialog: undefined,\n}\n\nconst openFolderWeb = () => {\n console.warn('open folder - not implemented')\n}\n\nconst openFolderRemote = async () => {\n const path = await RendererProcess.invoke(\n /* Dialog.prompt */ 'Dialog.prompt',\n /* message */ 'Choose path:'\n )\n if (!path) {\n return\n }\n await Command.execute(\n /* Workspace.setPath */ 'Workspace.setPath',\n /* path */ path\n )\n}\n\nconst openFolderElectron = async () => {\n const folders = await ElectronDialog.showOpenDialog(\n /* title */ 'Open Folder',\n /* properties */ ['openDirectory', 'dontAddToRecent', 'showHiddenFiles']\n )\n if (!folders || folders.length === 0) {\n return\n }\n const path = folders[0]\n await Command.execute(\n /* Workspace.setPath */ 'Workspace.setPath',\n /* path */ path\n )\n}\n\nexport const openFolder = () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return openFolderWeb()\n case PlatformType.Remote:\n return openFolderRemote()\n case PlatformType.Electron:\n return openFolderElectron()\n default:\n return\n }\n}\n\nconst openFileWeb = () => {\n console.warn('open file - not implemented')\n}\n\nconst openFileRemote = () => {\n console.warn('open file - not implemented')\n}\n\nconst openFileElectron = async () => {\n const [file] = await ElectronDialog.showOpenDialog('Open File', [\n 'openFile',\n 'dontAddToRecent',\n 'showHiddenFiles',\n ])\n await Command.execute('Main.openUri', file)\n}\n\nexport const openFile = () => {\n switch (Platform.platform) {\n case PlatformType.Web:\n return openFileWeb()\n case PlatformType.Remote:\n return openFileRemote()\n case PlatformType.Electron:\n return openFileElectron()\n default:\n return\n }\n}\n\nconst showAboutWeb = () => {\n console.warn('show about - not implemented')\n}\n\nconst showAboutRemote = () => {\n console.warn('show about - not implemented')\n}\n\nconst showAboutElectron = async () => {\n await ElectronWindowAbout.open()\n}\n\nexport const showAbout = async () => {\n switch (Platform.platform) {\n case 'web':\n return showAboutWeb()\n case 'remote':\n return showAboutRemote()\n case 'electron':\n return showAboutElectron()\n default:\n return\n }\n}\n\nexport const showMessage = async (message, options) => {\n if (state.dialog) {\n console.info('cannot show multiple dialogs at the same time', message)\n return\n }\n // TODO implement actual dialog component for web\n // RendererProcess.invoke(/* Dialog.alert */ 7834, /* message */ message)\n // TODO on electron use native dialog\n if (!options) {\n options = ['Show Command Output', 'Cancel', 'Open Git Log']\n }\n // @ts-ignore\n state.dialog = {\n message,\n options,\n }\n\n if (Platform.platform === 'electron') {\n const index = await ElectronDialog.showMessageBox(\n /* message */ message.message,\n /* buttons */ options\n )\n\n if (index === -1) {\n // TODO can this even happen?\n return\n }\n await handleClick(index)\n } else {\n await RendererProcess.invoke(\n /* Dialog.showErrorDialogWithOptions */ 'Dialog.showErrorDialogWithOptions',\n /* message */ message,\n /* options */ options\n )\n }\n}\n\nexport const close = async () => {\n // TODO support closing of electron dialogs\n if (!state.dialog) {\n console.info('no dialog to close')\n return\n }\n state.dialog = undefined\n await RendererProcess.invoke(/* Dialog.close */ 7836)\n}\n\nexport const handleClick = async (index) => {\n const dialog = state.dialog\n const option = dialog.options[index]\n // TODO handle case when index is out of bounds\n switch (option) {\n case 'Show Command Output':\n await close()\n const uri = `data://${dialog.message.stderr}`\n await Command.execute(/* Main.openUri */ 'Main.openUri', uri)\n // TODO show stderr in editor\n // TODO close dialog\n break\n default:\n break\n }\n}\n", "import * as Dialog from './Dialog.js'\n\nexport const Commands = {\n 'Dialog.close': Dialog.close,\n 'Dialog.handleClick': Dialog.handleClick,\n 'Dialog.openFile': Dialog.openFile,\n 'Dialog.openFolder': Dialog.openFolder,\n 'Dialog.showAbout': Dialog.showAbout,\n 'Dialog.showMessage': Dialog.showMessage,\n}\n", "import * as Assert from '../Assert/Assert.js'\nimport * as Json from '../Json/Json.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport { VError } from '../VError/VError.js'\n\nexport const downloadFile = async (fileName, url) => {\n Assert.string(fileName)\n Assert.string(url)\n await RendererProcess.invoke(\n /* Download.DownloadFile */ 'Download.downloadFile',\n /* fileName */ fileName,\n /* url */ url\n )\n}\n\nexport const downloadJson = async (json, fileName) => {\n let url = ''\n try {\n const stringified = Json.stringify(json)\n const blob = new Blob([stringified], {\n type: 'application/json',\n })\n url = URL.createObjectURL(blob)\n await downloadFile(fileName, url)\n } catch (error) {\n throw new VError(error, `Failed to download ${fileName}`)\n } finally {\n URL.revokeObjectURL(url)\n }\n}\n", "import * as Download from './Download.js'\n\nexport const Commands = {\n 'Download.downloadFile': Download.downloadFile,\n 'Download.downloadJson': Download.downloadJson,\n}\n", "import * as ExtensionHostDiagnostics from '../ExtensionHost/ExtensionHostDiagnostic.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\nconst getDiagnostics = async (editor) => {\n if (Platform.platform === PlatformType.Web) {\n console.info('diagnostics not yet implemented for web')\n return []\n }\n const diagnostics = await ExtensionHostDiagnostics.executeDiagnosticProvider(\n editor\n )\n console.log({ diagnostics })\n return diagnostics\n}\n\nconst getDiagnosticType = (diagnostic) => {\n return diagnostic.type\n}\n\nconst getVisibleDiagnostics = (editor, diagnostics) => {\n const visibleDiagnostics = []\n for (const diagnostic of diagnostics) {\n visibleDiagnostics.push({\n top: (diagnostic.rowIndex - editor.minLineY) * editor.rowHeight,\n left: diagnostic.columnIndex * editor.columnWidth,\n width: 20,\n height: editor.rowHeight,\n type: getDiagnosticType(diagnostic),\n })\n }\n return visibleDiagnostics\n}\n\nconst getScrollBarDiagnostics = (editor, diagnostics) => {\n const scrollBarDecorations = []\n for (const diagnostic of diagnostics) {\n scrollBarDecorations.push({\n top: (diagnostic.rowIndex / editor.lines.length) * editor.height,\n height: 2,\n })\n }\n return scrollBarDecorations\n}\n\nexport const runDiagnostics = async (editor) => {\n // Editor.sync(editor)\n const diagnostics = await getDiagnostics(editor)\n const visibleDiagnostics = getVisibleDiagnostics(editor, diagnostics)\n const scrollBarDiagnostics = getScrollBarDiagnostics(editor, diagnostics)\n // TODO only send visible diagnostics\n await RendererProcess.invoke(\n /* Editor.renderDiagnostics */ 770,\n /* id */ editor.id,\n /* diagnostics */ visibleDiagnostics,\n /* scrollBarDiagnostics */ scrollBarDiagnostics\n )\n}\n\nconst runDiagnosticsAll = () => {\n // TODO loop over all editors\n // const editor = Main.state.activeEditor\n // if (!editor) {\n // return\n // }\n // runDiagnostics(editor)\n}\n\nconst onceIdle = (fn) => {\n // TODO treeshake the if/else away in production\n // @ts-ignore\n if (typeof window !== 'undefined' && 'requestIdleCallback' in window) {\n // @ts-ignore\n requestIdleCallback(fn)\n } else {\n setTimeout(fn, 0)\n }\n}\n\nexport const scheduleDiagnosticsAll = () => {\n onceIdle(runDiagnosticsAll)\n}\n\nexport const hydrate = () => {\n // TODO use global event bus to listen to text document changes\n // TODO use debounce with a configurable delay/debounce time specified in settings.json\n // setInterval(scheduleDiagnostics, 1000)\n // setTimeout(scheduleDiagnostics, 1000)\n // TextDocument.map({\n // created: scheduleDiagnosticsAll,\n // changed: scheduleDiagnosticsAll,\n // saved() {},\n // })\n}\n\n// TODO use audio cues for screenreader users,\n// vscode has implemented something recently, maybe can also use this\n//\n// var utterance = new SpeechSynthesisUtterance();\n// utterance.text = \"error on line 10, column 11\";\n// window.speechSynthesis.speak(utterance);\n\n// see also https://tink.uk/using-the-web-speech-api-to-simulate-css-speech-support/\n", "import * as EditorDiagnostics from './EditorDiagnostics.js'\n\nexport const Commands = {\n 'EditorDiagnostics.hydrate': EditorDiagnostics.hydrate,\n}\n", "import * as EditorPosition from '../EditorCommand/EditorCommandPosition.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const show = async (editor, message, rowIndex, columnIndex) => {\n const x = EditorPosition.x(editor, rowIndex, columnIndex)\n const y = EditorPosition.y(editor, rowIndex, columnIndex)\n await RendererProcess.invoke(\n /* EditorError.show */ 'EditorError.show',\n /* message */ message,\n /* x */ x,\n /* y */ y\n )\n}\n", "import * as EditorError from './EditorError.js'\n\nexport const Commands = {\n 3900: EditorError.show,\n}\n", "import * as ExtensionHostShared from './ExtensionHostShared.js'\n\nconst combineResultsPrepareRename = (results) => {\n return results[0]\n}\n\nexport const executePrepareRenameProvider = (editor, offset) => {\n return ExtensionHostShared.executeProviders({\n event: `onRename:${editor.languageId}`,\n method: 'ExtensionHostRename.executePrepareRename',\n params: [editor.id, offset],\n noProviderFoundMessage: 'No rename provider found',\n combineResults: combineResultsPrepareRename,\n })\n}\n\nconst combineResultsRename = (results) => {\n return results[0]\n}\n\nexport const executeRenameProvider = (editor, offset, newName) => {\n return ExtensionHostShared.executeProviders({\n event: `onRename:${editor.languageId}`,\n method: 'ExtensionHostRename.executeRename',\n params: [editor.id, offset, newName],\n noProviderFoundMessage: 'No rename provider found',\n combineResults: combineResultsPrepareRename,\n })\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Editor from '../Editor/Editor.js'\nimport * as EditorPosition from '../EditorCommand/EditorCommandPosition.js'\nimport * as ExtensionHostRename from '../ExtensionHost/ExtensionHostRename.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as TextDocument from '../TextDocument/TextDocument.js'\nimport * as Assert from '../Assert/Assert.js'\n\n// TODO memory leak\nexport const state = {\n editor: undefined,\n}\n\nconst prepareRename = async (editor, rowIndex, columnIndex) => {\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n return ExtensionHostRename.executePrepareRenameProvider(editor, offset)\n}\n\nconst rename = (editor, rowIndex, columnIndex, newName) => {\n const offset = TextDocument.offsetAt(editor, rowIndex, columnIndex)\n return ExtensionHostRename.executeRenameProvider(editor, offset)\n}\n\nexport const open = async (editor) => {\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n Assert.number(rowIndex)\n Assert.number(columnIndex)\n\n // TODO handle error and add tests for handled error\n const prepareRenameResult = await prepareRename(editor, rowIndex, columnIndex)\n\n // TODO race condition, what is when editor is closed before promise resolves\n\n if (prepareRenameResult.canRename) {\n const x = EditorPosition.x(editor, rowIndex, columnIndex)\n const y = EditorPosition.y(editor, rowIndex, columnIndex)\n // const prepareRenameResult = await prepareRename(editor)\n // console.log({ prepareRenameResult })\n await RendererProcess.invoke(\n /* EditorRename.openWidget */ 4512,\n /* x */ x,\n /* y */ y\n )\n } else {\n // TODO also show error when promise rejects\n await Command.execute(\n /* EditorError.show */ 3900,\n /* editor */ editor,\n /* message */ 'You cannot rename this element',\n /* rowIndex */ rowIndex,\n /* columnIndex */ columnIndex\n )\n }\n}\n\nconst toPositionBasedEdits = (textDocument, edits) => {\n const positionBasedEdits = []\n for (const edit of edits) {\n const start = TextDocument.positionAt(textDocument, edit.offset)\n const end = TextDocument.positionAt(\n textDocument,\n edit.offset + edit.inserted.length - edit.deleted\n )\n positionBasedEdits.push({\n start,\n end,\n inserted: edit.inserted.split('\\n'),\n deleted: [''],\n })\n console.log(edit)\n }\n return positionBasedEdits\n}\n\n// TODO how to best apply workspace edit?\nconst applyWorkspaceEdits = async (editor, workspaceEdits) => {\n if (workspaceEdits.length === 0) {\n return\n }\n const workspaceEdit = workspaceEdits[0]\n const positionBasedEdits = toPositionBasedEdits(\n editor.textDocument,\n workspaceEdit.edits\n )\n Editor.scheduleDocumentAndCursorsSelections(editor, positionBasedEdits)\n}\n\nexport const finish = async (editor) => {\n // TODO what if cursor position changes while rename is in progress?\n // TODO what happens if file content changes while rename is in progress?\n // TODO what happens when file is closed while rename is in progress?\n const rowIndex = editor.selections[0]\n const columnIndex = editor.selections[1]\n const newName = await RendererProcess.invoke(/* EditorRename.finish */ 4513)\n console.log('do actual rename', { value: newName })\n // TODO support canceling rename (e.g. when user presses escape)\n const workspaceEdits = await rename(editor, rowIndex, columnIndex, newName)\n await applyWorkspaceEdits(editor, workspaceEdits)\n // console.log({ workspaceEdits })\n // Editor.scheduleDocumentAndSelections(editor)\n // console.log({ workspaceEdits })\n}\n\nexport const abort = async () => {\n await RendererProcess.invoke(/* EditorRename.closeWidget */ 4514)\n}\n", "import * as EditorRename from './EditorRename.js'\n\nexport const Commands = {\n 'EditorRename.abort': EditorRename.abort,\n 'EditorRename.finish': EditorRename.finish,\n 'EditorRename.open': EditorRename.open,\n}\n", "import * as ErrorHandling from './ErrorHandling.js'\n\nexport const Commands = {\n 'ErrorHandling.handleError': ErrorHandling.handleError,\n}\n", "import * as ExtensionHostCore from './ExtensionHostCore.js'\n\n// prettier-ignore\nexport const Commands={\n\n 'ExtensionHost.loadWebExtension': ExtensionHostCore.loadWebExtension,\n 'ExtensionHost.startWebExtensionHost': ExtensionHostCore.startWebExtensionHost,\n}\n", "import * as ExtensionMeta from './ExtensionMeta.js'\n\n// prettier-ignore\nexport const Commands = {\n 'ExtensionMeta.addNodeExtension': ExtensionMeta.addNodeExtension,\n 'ExtensionMeta.addWebExtension': ExtensionMeta.addWebExtension,\n}\n", "import * as OpenNativeFolder from '../OpenNativeFolder/OpenNativeFolder.js'\nimport * as Platform from '../Platform/Platform.js'\n\nexport const openExtensionsFolder = async () => {\n const extensionsFolder = await Platform.getExtensionsPath()\n await OpenNativeFolder.openNativeFolder(extensionsFolder)\n}\n\nexport const openCachedExtensionsFolder = async () => {\n const cachedExtensionsFolder = await Platform.getCachedExtensionsPath()\n await OpenNativeFolder.openNativeFolder(cachedExtensionsFolder)\n}\n", "import * as Extensions from './Extensions.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Extensions.openCachedExtensionsFolder': Extensions.openCachedExtensionsFolder,\n 'Extensions.openExtensionsFolder': Extensions.openExtensionsFolder,\n}\n", "import * as FileSystem from './FileSystem.js'\n\n// prettier-ignore\nexport const Commands = {\n 'FileSystem.chmod': FileSystem.chmod,\n 'FileSystem.getPathSeparator': FileSystem.getPathSeparator,\n 'FileSystem.mkdir': FileSystem.mkdir,\n 'FileSystem.readDirWithFileTypes': FileSystem.readDirWithFileTypes,\n 'FileSystem.readFile': FileSystem.readFile,\n 'FileSystem.remove': FileSystem.remove,\n 'FileSystem.writeFile': FileSystem.writeFile,\n}\n", "import * as FindWidget from './FindWidget.js'\n\nexport const Commands = {\n 'FindWidget.create': FindWidget.create,\n 'FindWidget.dispose': FindWidget.dispose,\n 'FindWidget.setValue': FindWidget.setValue,\n}\n", "import * as Editor from '../Editor/Editor.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\n// TODO format should be executed in parallel with saving\n// -> fast save, no need to wait for formatting\n// -> fast formatting, no need to wait for save\n\n// TODO should format on save when closing/switching editor?\n\n// TODO format with cursor\n// TODO should be in editor folder\n\nconst onDidSaveEditor = async (editor) => {\n console.log('format', editor)\n // Editor.sync(editor)\n // console.log(textDocument)\n // TODO only transfer incremental edits from shared process\n // TODO also format with cursor\n const newContent = await SharedProcess.invoke(\n /* ExtensionHost.format */ 'ExtensionHost.format',\n /* textDocumentId */ editor.textDocument.id\n )\n if (typeof newContent !== 'string') {\n console.warn('something is wrong with format on save', newContent)\n return\n }\n console.log({ newContent })\n // TODO use incremental edit\n const documentEdits = [\n {\n type: /* replace */ 3,\n text: newContent,\n },\n ]\n Editor.scheduleDocumentAndCursorsSelections(editor, documentEdits)\n}\n\nexport const hydrate = async () => {\n if (Platform.platform === PlatformType.Web) {\n }\n // TODO check preferences if format on save is enabled\n // EditorSave.onDidSave(onDidSaveEditor)\n}\n", "import * as Format from './Format.js'\n\nexport const Commands = {\n 'Format.hydrate': Format.hydrate,\n}\n", "import * as IconTheme from './IconTheme.js'\n\nexport const Commands = {\n 'IconTheme.addIcons': IconTheme.addIcons,\n 'IconTheme.getIconThemeCss': IconTheme.getIconThemeCss,\n 'IconTheme.hydrate': IconTheme.hydrate,\n // TODO command necessary?\n // TODO hydrate should be an alias for reload/load\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as FileSystem from '../FileSystem/FileSystem.js'\n\nexport const state = {\n uri: '',\n versionId: 0,\n}\n\nconst WIDTH = 170 // TODO how to keep in sync with css?\nconst SPACE = 10\nconst TRIANGLE_OFFSET_TOP = 22\nconst TRIANGLE_HEIGHT = 22\nconst TREE_ITEM_HEIGHT = 22\nconst TOP = TRIANGLE_OFFSET_TOP + (TREE_ITEM_HEIGHT - TRIANGLE_HEIGHT) / 2\n\nexport const show = async (uri, top, left) => {\n try {\n const version = ++state.versionId\n // TODO what to do on web? probably need to create blob url\n // or use https url for external images\n const blobUrl = await FileSystem.getBlobUrl(uri)\n if (version !== state.versionId) {\n return\n }\n await RendererProcess.invoke(\n /* Viewlet.hydrate */ 3028,\n /* id */ 'ImagePreview',\n /* imageUrl */ blobUrl,\n /* top */ top - TOP,\n /* left */ left - WIDTH - SPACE\n )\n } catch (error) {\n console.error(error)\n await RendererProcess.invoke(\n /* Viewlet.hydrate */ 3028,\n /* id */ 'ImagePreview',\n /* message */ 'Image could not be loaded',\n /* top */ top - TOP,\n /* left */ left - WIDTH - SPACE\n )\n }\n}\n\nexport const hide = async () => {\n ++state.versionId\n await RendererProcess.invoke(\n /* Viewlet.dispose */ 'Viewlet.dispose',\n /* id */ 'ImagePreview'\n )\n}\n", "import * as ImagePreview from './ImagePreview.js'\n\n// TODO only use ImagePreview module via ipc -> that way is is always lazyloaded\n\nexport const Commands = {\n 'ImagePreview.hide': ImagePreview.hide,\n 'ImagePreview.show': ImagePreview.show,\n}\n", "import * as Command from '../Command/Command.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport { VError } from '../VError/VError.js'\n\nconst getKeyBindings = async () => {\n return Command.execute(\n /* KeyBindingsInitial.getKeyBindings */ 'KeyBindingsInitial.getKeyBindings'\n )\n}\n\nexport const hydrate = async () => {\n try {\n const keyBindings = await getKeyBindings()\n await RendererProcess.invoke(\n /* KeyBindings.hydrate */ 'KeyBindings.hydrate',\n /* keyBindings */ keyBindings\n )\n } catch (error) {\n ErrorHandling.handleError(new VError(error, 'Failed to load KeyBindings'))\n }\n}\n\n// TODO where to store keybindings? need them here and in renderer process\n// how to avoid duplicate loading / where to store them and keep them in sync?\nexport const lookupKeyBinding = (commandId) => {\n switch (commandId) {\n case 'scm.acceptInput':\n return 'Ctrl+Enter'\n default:\n return ''\n }\n}\n\nexport const handleKeyBinding = async (keyBinding) => {\n await Command.execute(\n /* command */ keyBinding.command,\n // TODO should args always be defined? (probably yes -> monomorphism & simpler code since all objects are the same)\n ...(keyBinding.args || [])\n )\n // TODO\n // else if (typeof keyBinding.command === 'string') {\n // // TODO should calling command be async ? (actually don't care if it resolves -> can just send error event in case of error)\n // await SharedProcess.invoke(\n // /* ExtensionHost.executeCommand */ 'ExtensionHost.executeCommand',\n // /* commandId */ keyBinding.command,\n // ...(keyBinding.args || [])\n // )\n // }\n}\n", "import * as KeyBindings from './KeyBindings.js'\n\nexport const Commands = {\n 'KeyBindings.handleKeyBinding': KeyBindings.handleKeyBinding,\n 'KeyBindings.hydrate': KeyBindings.hydrate,\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\n\n// TODO extension key bindings\n\nexport const getKeyBindings = async () => {\n const assetDir = Platform.getAssetDir()\n const defaultKeyBindings = await Command.execute(\n /* Ajax.getJson */ 'Ajax.getJson',\n /* url */ `${assetDir}/config/defaultKeyBindings.json`\n )\n const actualKeyBindings = defaultKeyBindings\n const keyBindings = actualKeyBindings\n return keyBindings\n}\n", "import * as KeyBindingsInitial from './KeyBindingsInitial.js'\n\n// prettier-ignore\nexport const Commands = {\n 'KeyBindingsInitial.getKeyBindings': KeyBindingsInitial.getKeyBindings,\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Layout from './Layout.js'\n\nexport const Commands = {\n 'Layout.handleResize': Layout.handleResize,\n 'Layout.handleSashPointerDown': Layout.handleSashPointerDown,\n 'Layout.handleSashPointerMove': Layout.handleSashPointerMove,\n 'Layout.hide': Layout.hide,\n 'Layout.hideActivityBar': Layout.hideActivityBar,\n 'Layout.hidePanel': Layout.hidePanel,\n 'Layout.hideSideBar': Layout.hideSideBar,\n 'Layout.hydrate': Layout.hydrate,\n 'Layout.showActivityBar': Layout.showActivityBar,\n 'Layout.showPanel': Layout.showPanel,\n 'Layout.showSideBar': Layout.showSideBar,\n 'Layout.toggleActivityBar': Layout.toggleActivityBar,\n 'Layout.togglePanel': Layout.togglePanel,\n 'Layout.toggleSideBar': Layout.toggleSideBar,\n}\n", "import * as Listener from './Listener.js'\n\nexport const Commands = {\n 3444: Listener.execute,\n}\n", "import * as LocalStorage from './LocalStorage.js'\n\n// TODO only use LocalStorage module via ipc -> that way is is always lazyloaded\n\nexport const Commands = {\n 'LocalStorage.clear': LocalStorage.clear,\n 'LocalStorage.getJson': LocalStorage.getJson,\n 'LocalStorage.getText': LocalStorage.getText,\n 'LocalStorage.setJson': LocalStorage.setJson,\n 'LocalStorage.setText': LocalStorage.setText,\n}\n", "import * as Menu from './Menu.js'\n\nexport const Commands = {\n 'Menu.focusFirst': Menu.focusFirst,\n 'Menu.focusIndex': Menu.focusIndex,\n 'Menu.focusLast': Menu.focusLast,\n 'Menu.focusNext': Menu.focusNext,\n 'Menu.focusPrevious': Menu.focusPrevious,\n 'Menu.handleMouseEnter': Menu.handleMouseEnter,\n 'Menu.handleMouseLeave': Menu.handleMouseLeave,\n 'Menu.hide': Menu.hide,\n 'Menu.selectIndex': Menu.selectIndex,\n 'Menu.selectItem': Menu.selectItem,\n 'Menu.show': Menu.show,\n}\n", "// TODO maybe rename this module to Focus\n\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nconst PART_TITLE_BAR = 1\nconst PART_MAIN = 2\nconst PART_PANEL = 3\nconst PART_STATUS_BAR = 4\nconst PART_SIDE_BAR = 5\nconst PART_ACTIVITY_BAR = 6\n\nexport const state = {\n focusedPart: PART_TITLE_BAR,\n}\n\nexport const focusActivityBar = async () => {\n await RendererProcess.invoke(/* ActivityBar.focus */ 717115)\n}\n\nexport const focusStatusBar = async () => {\n await RendererProcess.invoke(/* StatusBar.focus */ 8882)\n}\n\nexport const focusPanel = async () => {\n await RendererProcess.invoke(/* Panel.focus */ 6664)\n}\n\nexport const focusSideBar = async () => {\n await RendererProcess.invoke(/* SideBar.focus */ 5554)\n}\n\nexport const focusTitleBar = async () => {\n await RendererProcess.invoke(/* TitleBar.focus */ 1331)\n}\n\nexport const focusMain = async () => {\n await RendererProcess.invoke(/* Main.focus */ 2145)\n}\n\nexport const focusNextTerminal = () => {\n // TODO\n}\n\nexport const focusPreviousTerminal = () => {\n // TODO\n}\n\nexport const focusPart = (part) => {\n state.focusedPart = part\n switch (state.focusedPart) {\n case PART_TITLE_BAR:\n return focusTitleBar()\n case PART_MAIN:\n return focusMain()\n case PART_PANEL:\n return focusPanel()\n case PART_STATUS_BAR:\n return focusStatusBar()\n case PART_SIDE_BAR:\n return focusSideBar()\n case PART_ACTIVITY_BAR:\n return focusActivityBar()\n default:\n throw console.warn(`unknown part ${part}`)\n }\n}\n\nconst getNextPart = (part) => {\n switch (part) {\n case PART_TITLE_BAR:\n return PART_MAIN\n case PART_MAIN:\n return PART_PANEL\n case PART_PANEL:\n return PART_STATUS_BAR\n case PART_STATUS_BAR:\n return PART_SIDE_BAR\n case PART_SIDE_BAR:\n return PART_ACTIVITY_BAR\n case PART_ACTIVITY_BAR:\n return PART_TITLE_BAR\n default:\n throw console.warn(`unknown part ${part}`)\n }\n}\n\nconst getPreviousPart = (part) => {\n switch (part) {\n case PART_TITLE_BAR:\n return PART_ACTIVITY_BAR\n case PART_MAIN:\n return PART_TITLE_BAR\n case PART_PANEL:\n return PART_MAIN\n case PART_STATUS_BAR:\n return PART_PANEL\n case PART_SIDE_BAR:\n return PART_STATUS_BAR\n case PART_ACTIVITY_BAR:\n return PART_SIDE_BAR\n default:\n throw console.warn(`unknown part ${part}`)\n }\n}\n\nconst isVisiblePart = (part) => {\n // TODO\n return true\n}\n\nconst getVisiblePart = (part, fn) => {\n const nextPart = fn(part)\n if (isVisiblePart(nextPart)) {\n return nextPart\n }\n return getVisiblePart(nextPart, fn)\n}\n\nconst getVisiblePartNext = (part) => {\n return getVisiblePart(part, getNextPart)\n}\n\nconst getVisiblePartPrevious = (part) => {\n return getVisiblePart(part, getPreviousPart)\n}\n\nconst getCurrentPart = () => {\n // TODO ask renderer process\n return state.focusedPart\n}\n\nexport const focusNextPart = async () => {\n const currentPart = getCurrentPart()\n const nextPart = getVisiblePartNext(currentPart)\n await focusPart(nextPart)\n}\n\nexport const focusPreviousPart = async () => {\n const currentPart = getCurrentPart()\n const previousPart = getVisiblePartPrevious(currentPart)\n await focusPart(previousPart)\n}\n", "import * as Navigation from './Navigation.js'\n\nexport const Commands = {\n 'Navigation.focusActivityBar': Navigation.focusActivityBar,\n 'Navigation.focusMain': Navigation.focusMain,\n 'Navigation.focusNextPart': Navigation.focusNextPart,\n 'Navigation.focusPanel': Navigation.focusPanel,\n 'Navigation.focusPreviousPart': Navigation.focusPreviousPart,\n 'Navigation.focusSideBar': Navigation.focusSideBar,\n 'Navigation.focusStatusBar': Navigation.focusStatusBar,\n 'Navigation.focusTitleBar': Navigation.focusTitleBar,\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const state = {\n notifications: [],\n}\n\nexport const create = async (type, text) => {\n state.notifications.push({ type, text })\n await RendererProcess.invoke(\n /* Notification.create */ 'Notification.create',\n /* type */ type,\n /* text */ text\n )\n}\n\nexport const showWithOptions = async (type, text, options) => {\n state.notifications.push({ type, text, options })\n console.log({ type, text, options })\n await RendererProcess.invoke(\n /* Notification.createWithOptions */ 993,\n /* type */ type,\n /* text */ text,\n /* options */ options\n )\n}\n\nexport const handleClick = (index) => {\n console.log('handle click')\n const notification = state.notifications[0]\n if (!notification.options) {\n throw new Error('notification has no options that can be clicked')\n }\n const option = notification.options[index]\n console.log({ notification, index, option })\n}\n\nexport const dispose = async (id) => {\n await RendererProcess.invoke(\n /* Notification.dispose */ 'Notification.dispose',\n /* id */ id\n )\n}\n", "import * as Notification from './Notification.js'\n\nexport const Commands = {\n 'Notification.create': Notification.create,\n 'Notification.dispose': Notification.dispose,\n 'Notification.handleClick': Notification.handleClick,\n 'Notification.showWithOptions': Notification.showWithOptions,\n}\n", "import * as ElectronWindow from '../ElectronWindow/ElectronWindow.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport { VError } from '../VError/VError.js'\n\nconst openUrlWeb = async (url) => {\n try {\n await RendererProcess.invoke(\n /* Open.openUrl */ 'Open.openUrl',\n /* url */ url\n )\n } catch (error) {\n throw new VError(error, `Failed to open url ${url}`)\n }\n}\n\nconst openUrlElectron = async (url) => {\n await ElectronWindow.openNew(url)\n}\n\nexport const openUrl = async (url) => {\n switch (Platform.platform) {\n case PlatformType.Electron:\n return openUrlElectron(url)\n default:\n return openUrlWeb(url)\n }\n}\n", "import * as Open from './Open.js'\n\nexport const Commands = {\n 'Open.openUrl': Open.openUrl,\n}\n", "import * as OpenNativeFolder from './OpenNativeFolder.js'\n\nexport const Commands = {\n 'OpenNativeFolder.openNativeFolder': OpenNativeFolder.openNativeFolder,\n}\n", "import * as Preferences from './Preferences.js'\n\n// prettier-ignore\nexport const Commands = {\n 'Preferences.hydrate': Preferences.hydrate,\n 'Preferences.openKeyBindingsJson': Preferences.openKeyBindingsJson,\n 'Preferences.openSettingsJson': Preferences.openSettingsJson,\n // TODO is this needed?\n // TODO rename to openKeyBindingsJson -> similar to openSettingsJson\n}\n", "import * as FileSystem from '../FileSystem/FileSystem.js'\nimport * as GlobalEventBus from '../GlobalEventBus/GlobalEventBus.js'\nimport * as Json from '../Json/Json.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\n\n// TODO maybe put this together with workspace\n\nconst isValid = (recentlyOpened) => {\n return recentlyOpened && Array.isArray(recentlyOpened)\n}\n\nexport const getRecentlyOpened = async () => {\n try {\n const content = await FileSystem.readFile('app://recently-opened.json')\n const parsed = Json.parse(content)\n if (!isValid(parsed)) {\n return []\n }\n // TODO handle error gracefully if this is not an array of strings\n return parsed\n } catch (error) {\n // TODO should check for error.code\n if (error.message.includes('File not found')) {\n // ignore\n } else if (error.message.includes('failed to parse json')) {\n // ignore\n } else {\n error.message = `Failed to read recently opened: ${error.message}`\n console.warn(error)\n }\n return []\n }\n}\n\nconst setRecentlyOpened = async (newRecentlyOpened) => {\n const stringified = Json.stringify(newRecentlyOpened)\n await FileSystem.writeFile('app://recently-opened.json', stringified)\n}\n\nexport const clearRecentlyOpened = async () => {\n await setRecentlyOpened([])\n}\n\nconst getNewRecentlyOpened = (recentlyOpened, path) => {\n const index = recentlyOpened.indexOf(path)\n if (index === -1) {\n return [path, ...recentlyOpened]\n }\n return [\n path,\n ...recentlyOpened.slice(0, index),\n ...recentlyOpened.slice(index + 1),\n ]\n}\n\nconst addToRecentlyOpenedWeb = async (path) => {\n const recentlyOpened = await getRecentlyOpened()\n const newRecentlyOpened = getNewRecentlyOpened(recentlyOpened, path)\n await setRecentlyOpened(newRecentlyOpened)\n}\n\nconst addToRecentlyOpenedRemote = async (path) => {\n await SharedProcess.invoke('RecentlyOpened.addPath', path)\n}\n\nexport const addToRecentlyOpened = async (path) => {\n switch (Platform.platform) {\n case 'electron':\n case 'remote':\n return addToRecentlyOpenedRemote(path)\n case 'web':\n return addToRecentlyOpenedWeb(path)\n default:\n return\n }\n}\n\nconst addWorkspacePathToRecentlyOpened = async () => {\n const workspacePath = Workspace.getWorkspacePath()\n if (!workspacePath) {\n return\n }\n // TODO add event listener that listens for workspace changes\n try {\n await addToRecentlyOpened(workspacePath)\n } catch {\n // ignore\n }\n}\n\n// TODO if it is somehow possible to make this more efficient\nexport const hydrate = async () => {\n await addWorkspacePathToRecentlyOpened()\n GlobalEventBus.addListener(\n 'workspace.change',\n addWorkspacePathToRecentlyOpened\n )\n}\n", "import * as RecentlyOpened from './RecentlyOpened.js'\n\n// prettier-ignore\nexport const Commands = {\n 'RecentlyOpened.addToRecentlyOpened': RecentlyOpened.addToRecentlyOpened,\n 'RecentlyOpened.clearRecentlyOpened': RecentlyOpened.clearRecentlyOpened,\n 'RecentlyOpened.getRecentlyOpened': RecentlyOpened.getRecentlyOpened,\n 'RecentlyOpened.hydrate': RecentlyOpened.hydrate,\n}\n", "import * as WebStorage from '../WebStorage/WebStorage.js'\nimport * as WebStorageType from '../WebStorageType/WebStorageType.js'\n\nexport const clear = () => {\n return WebStorage.clear(WebStorageType.SessionStorage)\n}\n\nexport const getText = (key) => {\n return WebStorage.getText(WebStorageType.SessionStorage, key)\n}\n\nexport const getJson = (key) => {\n return WebStorage.getJson(WebStorageType.SessionStorage, key)\n}\n\nexport const setText = (key, value) => {\n return WebStorage.setText(WebStorageType.SessionStorage, key, value)\n}\n\nexport const setJson = (key, value) => {\n return WebStorage.setJson(WebStorageType.SessionStorage, key, value)\n}\n", "// import * as Main from '../Main/Main.js'\nimport * as LocalStorage from '../LocalStorage/LocalStorage.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SessionStorage from '../SessionStorage/SessionStorage.js'\nimport * as ViewletStates from '../ViewletStates/ViewletStates.js'\nimport * as Workspace from '../Workspace/Workspace.js'\n\nconst getStateToSave = () => {\n const instances = ViewletStates.getAllInstances()\n // const mainEditors = Main.state.editors\n return {\n instances,\n mainEditors: [],\n workspace: {\n path: Workspace.state.workspacePath,\n homeDir: Workspace.state.homeDir,\n pathSeparator: Workspace.state.pathSeparator,\n uri: Workspace.state.workspaceUri,\n },\n }\n}\n\nexport const handleVisibilityChange = async (visibilityState) => {\n if (visibilityState === 'hidden') {\n const stateToSave = getStateToSave()\n await Promise.all([\n LocalStorage.setJson('stateToSave', stateToSave),\n SessionStorage.setJson('workspace', stateToSave.workspace),\n ])\n console.log('[renderer worker] state was saved')\n }\n}\n\nexport const hydrate = async () => {\n // TODO should set up listener in renderer process\n if (!Preferences.get('workbench.saveStateOnVisibilityChange')) {\n console.info(\n '[info] not saving state on visibility change - disabled by settings'\n )\n return\n }\n await RendererProcess.invoke('Window.onVisibilityChange')\n}\n", "import * as SaveState from './SaveState.js'\n\n// prettier-ignore\nexport const Commands = {\n 'SaveState.handleVisibilityChange': SaveState.handleVisibilityChange,\n 'SaveState.hydrate': SaveState.hydrate,\n}\n", "import * as Platform from '../Platform/Platform.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nconst SERVICE_WORKER_URL = '/serviceWorker.js'\n\nexport const hydrate = async () => {\n if (Platform.platform === 'electron') {\n return\n }\n if (!Preferences.get('serviceWorker.enabled')) {\n return\n }\n try {\n await RendererProcess.invoke(\n /* ServiceWorker.register */ 43725,\n /* url */ SERVICE_WORKER_URL\n )\n } catch (error) {\n if (error.message === 'A Service Worker has been blocked for this domain') {\n // ignore\n } else {\n console.info(`service worker could not be registered: ${error}`)\n }\n }\n}\n\nexport const uninstall = async () => {\n if (Platform.platform === 'electron') {\n return\n }\n try {\n await RendererProcess.invoke(/* ServiceWorker.uninstall */ 42726)\n } catch (error) {\n console.info(`service worker could not be unregistered: ${error}`)\n }\n}\n", "import * as ServiceWorker from './ServiceWorker.js'\n\nexport const Commands = {\n 'ServiceWorker.hydrate': ServiceWorker.hydrate,\n 'ServiceWorker.uninstall': ServiceWorker.uninstall,\n}\n", "import * as SessionReplay from './SessionReplay.js'\n\n// prettier-ignore\nexport const Commands = {\n 'SessionReplay.downloadSession': SessionReplay.downloadSession,\n 'SessionReplay.openSession': SessionReplay.openSession,\n 'SessionReplay.replayCurrentSession': SessionReplay.replayCurrentSession,\n 'SessionReplay.replaySession': SessionReplay.replaySession,\n}\n", "import * as SessionStorage from './SessionStorage.js'\n\n// TODO only use SessionStorage module via ipc -> that way is is always lazyloaded\n\nexport const Commands = {\n 'SessionStorage.clear': SessionStorage.clear,\n 'SessionStorage.getJson': SessionStorage.getJson,\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const selectItem = async (text) => {\n await Command.execute('Menu.selectItem', text)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const setCursor = async (rowIndex, columnIndex) => {\n await Command.execute('Editor.cursorSet', rowIndex, columnIndex)\n}\n\nexport const openCompletion = async () => {\n await Command.execute('Editor.openCompletion')\n}\n\nexport const openEditorContextMenu = async () => {\n await Command.execute('Editor.handleContextMenu', 0, 0)\n}\n\nexport const executeTabCompletion = async () => {\n await Command.execute('Editor.tabCompletion')\n}\n\nexport const executeBraceCompletion = async (text) => {\n await Command.execute('Editor.braceCompletion', text)\n}\n\nexport const cursorCharacterRight = async () => {\n await Command.execute('Editor.cursorCharacterRight')\n}\n\nexport const cursorCharacterLeft = async () => {\n await Command.execute('Editor.cursorCharacterLeft')\n}\n\nexport const copyLineDown = async () => {\n await Command.execute('Editor.copyLineDown')\n}\n\nexport const cursorDown = async () => {\n await Command.execute('Editor.cursorDown')\n}\n\nexport const cursorUp = async () => {\n await Command.execute('Editor.cursorUp')\n}\n\nexport const cursorWordLeft = async () => {\n await Command.execute('Editor.cursorWordLeft')\n}\n\nexport const cursorWordRight = async () => {\n await Command.execute('Editor.cursorWordRight')\n}\n\nexport const goToDefinition = async () => {\n await Command.execute('Editor.goToDefinition')\n}\n\nexport const goToTypeDefinition = async () => {\n await Command.execute('Editor.goToTypeDefinition')\n}\n\nexport const type = async (text) => {\n await Command.execute('Editor.type')\n}\n\nexport const findAllReferences = async () => {\n await Command.execute('SideBar.show', 'References', /* focus */ true)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const openContextMenu = async (index) => {\n await Command.execute('Explorer.handleContextMenuKeyboard', index)\n}\n\nexport const focus = async () => {\n await Command.execute('Explorer.focusIndex', -1)\n}\n\nexport const focusNext = async () => {\n await Command.execute('Explorer.focusNext')\n}\n\nexport const focusIndex = async (index) => {\n await Command.execute('Explorer.focusIndex', index)\n}\n\nexport const clickCurrent = async () => {\n await Command.execute('Explorer.handleClickCurrent')\n}\n\nexport const handleArrowLeft = async () => {\n await Command.execute('Explorer.handleArrowLeft')\n}\n\nexport const focusLast = async () => {\n await Command.execute('Explorer.focusLast')\n}\n\nexport const focusFirst = async () => {\n await Command.execute('Explorer.focusFirst')\n}\n\nexport const removeDirent = async () => {\n await Command.execute('Explorer.removeDirent')\n}\n\nexport const expandRecursively = async () => {\n await Command.execute('Explorer.expandRecursively')\n}\n\nexport const newFile = async () => {\n await Command.execute('Explorer.newFile')\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const addWebExtension = async (relativePath) => {\n // TODO compute absolutePath\n const absolutePath = relativePath\n await Command.execute('ExtensionMeta.addWebExtension', absolutePath)\n}\n\nexport const addNodeExtension = async (relativePath) => {\n // TODO compute absolutePath\n const absolutePath = relativePath\n await Command.execute('ExtensionMeta.addNodeExtension', absolutePath)\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\n\nexport const writeFile = async (path, content) => {\n await Command.execute('FileSystem.writeFile', path, content)\n}\n\nexport const mkdir = async (path) => {\n await Command.execute('FileSystem.mkdir', path)\n}\n\nexport const getTmpDir = async ({ scheme = 'memfs' } = {}) => {\n switch (scheme) {\n case 'memfs':\n return 'memfs://'\n default:\n return Platform.getTmpDir()\n }\n}\n\nexport const chmod = async (uri, permissions) => {\n await Command.execute('FileSystem.chmod', uri, permissions)\n}\n\nexport const createExecutable = async (content) => {\n const tmpDir = await getTmpDir({ scheme: 'file' })\n const nodePath = await Platform.getNodePath()\n const gitPath = `${tmpDir}/git`\n await writeFile(\n gitPath,\n `#!${nodePath}\n ${content}`\n )\n await chmod(gitPath, '755')\n return gitPath\n}\n\nexport const createExecutableFrom = async (path) => {\n const testPath = await Platform.getTestPath()\n const absolutePath = testPath + '/' + path\n const content = await Command.execute('Ajax.getText', absolutePath)\n return createExecutable(content)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const openUri = async (uri) => {\n await Command.execute('Main.openUri', uri)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const setPath = async (path) => {\n await Command.execute('Workspace.setPath', path)\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nconst getKeyOptions = (rawKey) => {\n if (rawKey.includes('+')) {\n const parts = rawKey.split('+')\n let ctrlKey = false\n let altKey = false\n let spaceKey = false\n let key = ''\n for (const part of parts) {\n switch (part) {\n case 'Control':\n ctrlKey = true\n break\n case 'Space':\n key = ' '\n break\n case 'Alt':\n altKey = true\n break\n default:\n key = part\n break\n }\n }\n return {\n key,\n ctrlKey,\n altKey,\n }\n }\n return { key: rawKey }\n}\n\nexport const press = async (key) => {\n const keyOptions = getKeyOptions(key)\n const options = {\n cancelable: true,\n bubbles: true,\n ...keyOptions,\n }\n await RendererProcess.invoke(\n 'TestFrameWork.performKeyBoardAction',\n 'press',\n options\n )\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const open = async () => {\n await Command.execute('Viewlet.openWidget', 'QuickPick', 'everything')\n}\n\nexport const setValue = async (value) => {\n await Command.execute('QuickPick.handleInput', value, 0)\n}\n\nexport const focusNext = async () => {\n await Command.execute('QuickPick.focusNext')\n}\n\nexport const focusIndex = async (index) => {\n await Command.execute('QuickPick.focusIndex', index)\n}\n\nexport const focusPrevious = async () => {\n await Command.execute('QuickPick.focusPrevious')\n}\n\nexport const selectItem = async (label) => {\n await Command.execute('QuickPick.selectItem', label)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const setValue = async (value) => {\n await Command.execute('Search.setValue', value)\n}\n", "import * as Command from '../Command/Command.js'\n\nexport const open = async (id) => {\n await Command.execute('SideBar.showOrHideViewlet', id)\n}\n", "import * as ExtensionHostCommand from '../ExtensionHost/ExtensionHostCommands.js'\n\nexport const execute = async (id, ...args) => {\n await ExtensionHostCommand.executeCommand(id)\n}\n", "import * as Platform from '../Platform/Platform.js'\n\nexport const getNodePath = () => {\n return Platform.getNodePath()\n}\n", "import * as Preferences from '../Preferences/Preferences.js'\n\nexport const update = async (settings) => {\n await Preferences.update(settings)\n}\n", "export * as ContextMenu from './TestFrameWorkComponentContextMenu.js'\nexport * as Editor from './TestFrameWorkComponentEditor.js'\nexport * as Explorer from './TestFrameWorkComponentExplorer.js'\nexport * as Extension from './TestFrameWorkComponentExtension.js'\nexport * as FileSystem from './TestFrameWorkComponentFileSystem.js'\nexport * as Main from './TestFrameWorkComponentMain.js'\nexport * as Workspace from './TestFrameWorkComponentWorkspace.js'\nexport * as KeyBoard from './TestFrameWorkComponentKeyBoard.js'\nexport * as QuickPick from './TestFrameWorkComponentQuickPick.js'\nexport * as Search from './TestFrameWorkComponentSearch.js'\nexport * as SideBar from './TestFrameWorkComponentSideBar.js'\nexport * as Command from './TestFrameWorkComponentCommand.js'\nexport * as Platform from './TestFrameWorkComponentPlatform.js'\nexport * as Settings from './TestFrameWorkComponentSettings.js'\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const create = (selector, options) => {\n return new Locator(selector, options)\n}\n\nconst Locator = function (selector, { nth = -1, hasText = '' } = {}) {\n this._selector = selector\n this._nth = nth\n this._hasText = hasText\n}\n\nconst performAction = async (locator, fnName, options) => {\n return RendererProcess.invoke(\n 'TestFrameWork.performAction',\n locator,\n fnName,\n options\n )\n}\n\nconst toButtonNumber = (buttonType) => {\n switch (buttonType) {\n case 'left':\n return 0\n case 'middle':\n return 1\n case 'right':\n return 2\n default:\n throw new Error(`unsupported button type: ${buttonType}`)\n }\n}\n\nLocator.prototype.click = async function ({ button = 'left' } = {}) {\n const options = {\n cancable: true,\n bubbles: true,\n button: toButtonNumber(button),\n detail: 1,\n }\n return performAction(this, 'click', options)\n}\n\nLocator.prototype.hover = async function () {\n const options = {\n cancable: true,\n bubbles: true,\n }\n return performAction(this, 'hover', options)\n}\n\nLocator.prototype.first = function () {\n return create(this._selector, {\n nth: 0,\n })\n}\n\nLocator.prototype.locator = function (subSelector) {\n return create(`${this._selector} ${subSelector}`)\n}\n\nLocator.prototype.nth = function (nth) {\n return create(this._selector, { nth })\n}\n\nLocator.prototype.type = async function (text) {\n const options = { text }\n return performAction(this, 'type', options)\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\nexport { create as Locator } from './Locator.js'\nimport * as Timestamp from '../Timestamp/Timestamp.js'\n\nexport const getTmpDir = async () => {\n return `memfs://`\n}\n\nconst waitForReady = async () => {\n // const startTime = Time.getTimeStamp()\n // const endTime = startTime + maxTimeout\n // let currentTime = startTime\n // while (currentTime < endTime) {\n // const element = querySelectorWithOptions(\n // '.ActivityBarItem[title=\"Explorer\"]'\n // )\n // if (element) {\n // return\n // }\n // await Timeout.waitForMutation(100)\n // currentTime = Time.getTimeStamp()\n // }\n // throw new Error(`Main element not found`)\n}\n\nexport const test = async (name, fn) => {\n let _error\n let _start\n let _end\n let _duration\n try {\n await waitForReady()\n _start = Timestamp.now()\n await fn()\n _end = Timestamp.now()\n _duration = `${_end - _start}ms`\n console.info(`[test passed] ${name} in ${_duration}`)\n } catch (error) {\n console.log({ error })\n _error = error.message\n error.message = `Test failed: ${name}: ${error.message}`\n console.error(error)\n }\n let state\n let background\n let text\n if (_error) {\n state = 'fail'\n background = 'red'\n text = `test failed: ${_error}`\n } else {\n background = 'green'\n text = `test passed in ${_duration}`\n state = 'pass'\n }\n await RendererProcess.invoke(\n 'TestFrameWork.showOverlay',\n state,\n background,\n text\n )\n}\n\ntest.skip = async (id, fn) => {\n const state = 'skip'\n const background = 'yellow'\n const text = `test skipped ${id}`\n await RendererProcess.invoke(\n 'TestFrameWork.showOverlay',\n state,\n background,\n text\n )\n}\n\nconst Assert = {\n string(value, message) {\n if (typeof value !== 'string') {\n throw new Error(message)\n }\n },\n number(value, message) {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new Error(message)\n }\n },\n}\n\nexport const expect = (locator) => {\n return {\n async checkSingleElementCondition(fnName, options) {\n Assert.string(fnName)\n return RendererProcess.invoke(\n 'TestFrameWork.checkSingleElementCondition',\n locator,\n fnName,\n options\n )\n },\n async checkMultiElementCondition(fnName, options) {\n return RendererProcess.invoke(\n 'TestFrameWork.checkMultiElementCondition',\n locator,\n fnName,\n options\n )\n },\n async toBeVisible() {\n if (this.negated) {\n throw new Error(`use toBeHidden instead of not.toBeVisible`)\n }\n return this.checkSingleElementCondition('toBeVisible', {})\n },\n async toHaveText(text) {\n Assert.string(text, 'text must be of type string')\n return this.checkSingleElementCondition('toHaveText', { text })\n },\n async toBeFocused() {\n return this.checkSingleElementCondition('toBeFocused')\n },\n async toHaveCSS(key, value) {\n return this.checkSingleElementCondition('toHaveCss', {\n key,\n value,\n })\n },\n async toHaveAttribute(key, value) {\n Assert.string(key, 'key must be of type string')\n // Assert.string(value, 'value must be of type string')\n return this.checkSingleElementCondition('toHaveAttribute', {\n key,\n value,\n })\n },\n async toHaveClass(className) {\n Assert.string(className, 'className must be of type string')\n return await this.checkSingleElementCondition('toHaveClass', {\n className,\n })\n },\n async toHaveId(id) {\n Assert.string(id, 'id must be of type string')\n return await this.checkSingleElementCondition('toHaveId', {\n id,\n })\n },\n async toHaveCount(count) {\n Assert.number(count, 'count must be of type string')\n return this.checkMultiElementCondition('toHaveCount', { count })\n },\n async toBeHidden() {\n return this.checkMultiElementCondition('toBeHidden', {})\n },\n get not() {\n this.negated = true\n return this\n },\n }\n}\n", "import { VError } from '../VError/VError.js'\nimport * as TestFrameWorkComponent from '../TestFrameWorkComponent/TestFrameWorkComponent.js'\nimport * as TestFrameWork from '../TestFrameWork/TestFrameWork.js'\n\nexport const state = {\n tests: [],\n}\n\nconst importScript = async (url) => {\n try {\n return await import(url)\n } catch (error) {\n throw new VError(error, `Failed to import script ${url}`)\n }\n}\n\nconst exposeGlobals = (global, object) => {\n for (const [key, value] of Object.entries(object)) {\n global[key] = value\n }\n}\n\nexport const execute = async (href) => {\n exposeGlobals(globalThis, TestFrameWorkComponent)\n exposeGlobals(globalThis, TestFrameWork)\n // TODO\n // 0. wait for page to be ready\n // 1. get script to import from renderer process (url or from html)\n const scriptUrl = href\n // 2. import that script\n const module = await importScript(scriptUrl)\n // 3. if import fails, display error message\n\n // 4. run the test\n // 5. if test fails, display error message\n // 6. if test succeeds, display success message\n}\n", "import * as Test from './Test.js'\n\nexport const Commands = {\n 'Test.execute': Test.execute,\n}\n", "import * as TitleBarMenuBar from './TitleBarMenuBar.js'\nimport * as MenuIpc from '../Menu/Menu.ipc.js'\n\n// prettier-ignore\nexport const Commands = {\n\n\n 'TitleBarMenuBar.closeMenu': TitleBarMenuBar.closeMenu,\n 'TitleBarMenuBar.focus': TitleBarMenuBar.focus,\n 'TitleBarMenuBar.focusIndex': TitleBarMenuBar.focusIndex,\n 'TitleBarMenuBar.focusNext': TitleBarMenuBar.focusNext,\n 'TitleBarMenuBar.focusPrevious': TitleBarMenuBar.focusPrevious,\n 'TitleBarMenuBar.handleKeyArrowDown': TitleBarMenuBar.handleKeyArrowDown,\n 'TitleBarMenuBar.handleKeyArrowLeft': TitleBarMenuBar.handleKeyArrowLeft,\n 'TitleBarMenuBar.handleKeyArrowRight': TitleBarMenuBar.handleKeyArrowRight,\n 'TitleBarMenuBar.handleKeyArrowUp': TitleBarMenuBar.handleKeyArrowUp,\n 'TitleBarMenuBar.handleKeyEnd': TitleBarMenuBar.handleKeyEnd,\n 'TitleBarMenuBar.handleKeyEnter': TitleBarMenuBar.handleKeyEnter,\n 'TitleBarMenuBar.handleKeyEscape': TitleBarMenuBar.handleKeyEscape,\n 'TitleBarMenuBar.handleKeyHome': TitleBarMenuBar.handleKeyHome,\n 'TitleBarMenuBar.handleKeySpace': TitleBarMenuBar.handleKeySpace,\n 'TitleBarMenuBar.hydrate': TitleBarMenuBar.hydrate,\n 'TitleBarMenuBar.openMenu': TitleBarMenuBar.openMenu,\n 'TitleBarMenuBar.toggleIndex': TitleBarMenuBar.toggleIndex,\n ...MenuIpc.Commands,\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Viewlet from './Viewlet.js'\n\nexport const Commands = {\n 'Viewlet.closeWidget': Viewlet.closeWidget,\n 'Viewlet.getAllStates': Viewlet.getAllStates,\n 'Viewlet.openWidget': Viewlet.openWidget,\n 2133: Viewlet.send,\n}\n", "import * as Window from './Window.js'\n\nexport const Commands = {\n 'Window.close': Window.close,\n 'Window.exit': Window.exit,\n 'Window.makeScreenshot': Window.makeScreenshot,\n 'Window.maximize': Window.maximize,\n 'Window.minimize': Window.minimize,\n 'Window.openNew': Window.openNew,\n 'Window.reload': Window.reload,\n 'Window.unmaximize': Window.unmaximize,\n}\n", "import * as Workbench from './Workbench.js'\n\nexport const Commands = {\n 'Workbench.unload': Workbench.unload,\n}\n", "import * as Workspace from './Workspace.js'\n\nexport const Commands = {\n 'Workspace.hydrate': Workspace.hydrate,\n 'Workspace.setPath': Workspace.setPath,\n 'Workspace.setUri': Workspace.setUri,\n}\n", "import * as ModuleId from '../ModuleId/ModuleId.js'\n\nexport const load = (moduleId) => {\n switch (moduleId) {\n case ModuleId.Ajax:\n return import('../Ajax/Ajax.ipc.js')\n case ModuleId.Audio:\n return import('../Audio/Audio.ipc.js')\n case ModuleId.Base64:\n return import('../Base64/Base64.ipc.js')\n case ModuleId.Blob:\n return import('../Blob/Blob.ipc.js')\n case ModuleId.CacheStorage:\n return import('../CacheStorage/CacheStorage.ipc.js')\n case ModuleId.Callback:\n return import('../Callback/Callback.ipc.js')\n case ModuleId.ClipBoard:\n return import('../ClipBoard/ClipBoard.ipc.js')\n case ModuleId.ColorPicker:\n return import('../ColorPicker/ColorPicker.ipc.js')\n case ModuleId.ColorTheme:\n return import('../ColorTheme/ColorTheme.ipc.js')\n case ModuleId.ColorThemeFromJson:\n return import('../ColorThemeFromJson/ColorThemeFromJson.ipc.js')\n case ModuleId.ContentTracing:\n return import('../ContentTracing/ContentTracing.ipc.js')\n case ModuleId.ContextMenu:\n return import('../ContextMenu/ContextMenu.ipc.js')\n case ModuleId.Developer:\n return import('../Developer/Developer.ipc.js')\n case ModuleId.Dialog:\n return import('../Dialog/Dialog.ipc.js')\n case ModuleId.Download:\n return import('../Download/Download.ipc.js')\n case ModuleId.EditorDiagnostics:\n return import('../EditorDiagnostics/EditorDiagnostics.ipc.js')\n case ModuleId.EditorError:\n return import('../EditorError/EditorError.ipc.js')\n case ModuleId.EditorRename:\n return import('../EditorRename/EditorRename.ipc.js')\n case ModuleId.ErrorHandling:\n return import('../ErrorHandling/ErrorHandling.ipc.js')\n case ModuleId.ExtensionHostCode:\n return import('../ExtensionHost/ExtensionHostCore.ipc.js')\n case ModuleId.ExtensionMeta:\n return import('../ExtensionMeta/ExtensionMeta.ipc.js')\n case ModuleId.Extensions:\n return import('../Extensions/Extensions.ipc.js')\n case ModuleId.FileSystem:\n return import('../FileSystem/FileSystem.ipc.js')\n case ModuleId.FindWidget:\n return import('../FindWidget/FindWidget.ipc.js')\n case ModuleId.Format:\n return import('../Format/Format.ipc.js')\n case ModuleId.IconTheme:\n return import('../IconTheme/IconTheme.ipc.js')\n case ModuleId.ImagePreview:\n return import('../ImagePreview/ImagePreview.ipc.js')\n case ModuleId.KeyBindings:\n return import('../KeyBindings/KeyBindings.ipc.js')\n case ModuleId.KeyBindingsInitial:\n return import('../KeyBindingsInitial/KeyBindingsInitial.ipc.js')\n case ModuleId.Layout:\n return import('../Layout/Layout.ipc.js')\n case ModuleId.Listener:\n return import('../Listener/Listener.ipc.js')\n case ModuleId.LocalStorage:\n return import('../LocalStorage/LocalStorage.ipc.js')\n case ModuleId.Menu:\n return import('../Menu/Menu.ipc.js')\n case ModuleId.Navigatiom:\n return import('../Navigation/Navigation.ipc.js')\n case ModuleId.Notification:\n return import('../Notification/Notification.ipc.js')\n case ModuleId.Open:\n return import('../Open/Open.ipc.js')\n case ModuleId.OpenNativeFolder:\n return import('../OpenNativeFolder/OpenNativeFolder.ipc.js')\n case ModuleId.Preferences:\n return import('../Preferences/Preferences.ipc.js')\n case ModuleId.RecentlyOpened:\n return import('../RecentlyOpened/RecentlyOpened.ipc.js')\n case ModuleId.SaveState:\n return import('../SaveState/SaveState.ipc.js')\n case ModuleId.ServiceWorker:\n return import('../ServiceWorker/ServiceWorker.ipc.js')\n case ModuleId.SessionReplay:\n return import('../SessionReplay/SessionReplay.ipc.js')\n case ModuleId.SessionStorage:\n return import('../SessionStorage/SessionStorage.ipc.js')\n case ModuleId.Test:\n return import('../Test/Test.ipc.js')\n case ModuleId.TestFramework:\n return import('../TestFrameWork/TestFrameWork.js')\n case ModuleId.TestFrameworkComponent:\n return import('../TestFrameWorkComponent/TestFrameWorkComponent.js')\n case ModuleId.TitleBarMenu:\n return import('../TitleBarMenuBar/TitleBarMenuBar.ipc.js')\n case ModuleId.Viewlet:\n return import('../Viewlet/Viewlet.ipc.js')\n case ModuleId.ViewletQuickPick:\n return import('../ViewletQuickPick/ViewletQuickPick.ipc.js')\n case ModuleId.Window:\n return import('../Window/Window.ipc.js')\n case ModuleId.Workbench:\n return import('../Workbench/Workbench.ipc.js')\n case ModuleId.Workspace:\n return import('../Workspace/Workspace.ipc.js')\n default:\n throw new Error(`module ${moduleId} not found`)\n }\n}\n", "import * as ModuleId from '../ModuleId/ModuleId.js'\n\nexport const getModuleId = (commandId) => {\n switch (commandId) {\n // TODO this should be in layout module\n case 'Ajax.getJson':\n case 'Ajax.getText':\n return ModuleId.Ajax\n case 'Audio.playBell':\n return ModuleId.Audio\n case 'Base64.decode':\n return ModuleId.Base64\n case 'Blob.base64StringToBlob':\n return ModuleId.Blob\n case 'CacheStorage.clearCache':\n case 'CacheStorage.getJson':\n case 'CacheStorage.setJson':\n return ModuleId.CacheStorage\n case 'Callback.reject':\n case 'Callback.resolve':\n return ModuleId.Callback\n case 'ClipBoard.readNativeFiles':\n case 'ClipBoard.readText':\n case 'ClipBoard.writeNativeFiles':\n case 'ClipBoard.writeText':\n return ModuleId.ClipBoard\n case 'ColorPicker.close':\n case 'ColorPicker.open':\n return ModuleId.ColorPicker\n case 'ColorTheme.hydrate':\n case 'ColorTheme.setColorTheme':\n return ModuleId.ColorTheme\n case 'ColorThemeFromJson.createColorThemeFromJson':\n return ModuleId.ColorThemeFromJson\n case 'ContentTracing.start':\n case 'ContentTracing.stop':\n return ModuleId.ContentTracing\n case 'ContextMenu.focusFirst':\n case 'ContextMenu.focusLast':\n case 'ContextMenu.focusNext':\n case 'ContextMenu.focusPrevious':\n case 'ContextMenu.hide':\n case 'ContextMenu.select':\n case 'ContextMenu.selectCurrent':\n case 'ContextMenu.show':\n return ModuleId.ContextMenu\n case 'Developer.allocateMemoryInSharedProcess':\n case 'Developer.clearCache':\n case 'Developer.crashMainProcess':\n case 'Developer.crashSharedProcess':\n case 'Developer.createSharedProcessHeapSnapshot':\n case 'Developer.createSharedProcessProfile':\n case 'Developer.downloadViewletState':\n case 'Developer.getMemoryUsageContent':\n case 'Developer.getStartupPerformanceContent':\n case 'Developer.openCacheFolder':\n case 'Developer.openConfigFolder':\n case 'Developer.openDataFolder':\n case 'Developer.openLogsFolder':\n case 'Developer.openProcessExplorer':\n case 'Developer.reloadColorTheme':\n case 'Developer.reloadIconTheme':\n case 'Developer.showColorThemeCss':\n case 'Developer.showIconThemeCss':\n case 'Developer.showMemoryUsage':\n case 'Developer.showStartupPerformance':\n case 'Developer.startupPerformance':\n case 'Developer.toggleDeveloperTools':\n return ModuleId.Developer\n case 'Dialog.close':\n case 'Dialog.handleClick':\n case 'Dialog.openFile':\n case 'Dialog.openFolder':\n case 'Dialog.showAbout':\n case 'Dialog.showMessage':\n return ModuleId.Dialog\n case 'Download.downloadFile':\n case 'Download.downloadJson':\n return ModuleId.Download\n case 'EditorDiagnostics.hydrate':\n return ModuleId.EditorDiagnostics\n case 3900:\n return ModuleId.EditorError\n case 'EditorRename.abort':\n case 'EditorRename.finish':\n case 'EditorRename.open':\n return ModuleId.EditorRename\n case 'ErrorHandling.handleError':\n return ModuleId.ErrorHandling\n case 'ExtensionHost.loadWebExtension':\n case 'ExtensionHost.startWebExtensionHost':\n return ModuleId.ExtensionHostCode\n case 'ExtensionMeta.addExtension':\n case 'ExtensionMeta.addNodeExtension':\n case 'ExtensionMeta.addWebExtension':\n return ModuleId.ExtensionMeta\n case 'Extensions.openCachedExtensionsFolder':\n case 'Extensions.openExtensionsFolder':\n return ModuleId.Extensions\n case 'FileSystem.getPathSeparator':\n case 'FileSystem.mkdir':\n case 'FileSystem.readDirWithFileTypes':\n case 'FileSystem.readFile':\n case 'FileSystem.remove':\n case 'FileSystem.writeFile':\n return ModuleId.FileSystem\n case 'FindWidget.create':\n case 'FindWidget.dispose':\n case 'FindWidget.setValue':\n return ModuleId.FindWidget\n case 'Format.hydrate':\n return ModuleId.Format\n case 'IconTheme.addIcons':\n case 'IconTheme.getIconThemeCss':\n case 'IconTheme.hydrate':\n return ModuleId.IconTheme\n case 'ImagePreview.hide':\n case 'ImagePreview.show':\n return ModuleId.ImagePreview\n case 'KeyBindings.handleKeyBinding':\n case 'KeyBindings.hydrate':\n return ModuleId.KeyBindings\n case 'KeyBindingsInitial.getKeyBindings':\n return ModuleId.KeyBindingsInitial\n case 'Layout.handleResize':\n case 'Layout.handleSashPointerDown':\n case 'Layout.handleSashPointerMove':\n case 'Layout.hide':\n case 'Layout.hideActivityBar':\n case 'Layout.hidePanel':\n case 'Layout.hideSideBar':\n case 'Layout.hydrate':\n case 'Layout.showActivityBar':\n case 'Layout.showPanel':\n case 'Layout.showSideBar':\n case 'Layout.toggleActivityBar':\n case 'Layout.togglePanel':\n case 'Layout.toggleSideBar':\n return ModuleId.Layout\n case 3444:\n return ModuleId.Listener\n case 'LocalStorage.clear':\n case 'LocalStorage.getItem':\n case 'LocalStorage.getJson':\n case 'LocalStorage.getText':\n case 'LocalStorage.setJson':\n case 'LocalStorage.setText':\n return ModuleId.LocalStorage\n case 'Menu.focusFirst':\n case 'Menu.focusIndex':\n case 'Menu.focusLast':\n case 'Menu.focusNext':\n case 'Menu.focusPrevious':\n case 'Menu.handleMouseEnter':\n case 'Menu.hide':\n case 'Menu.selectIndex':\n case 'Menu.selectItem':\n case 'Menu.show':\n return ModuleId.Menu\n case 'Navigation.focusActivityBar':\n case 'Navigation.focusMain':\n case 'Navigation.focusNextPart':\n case 'Navigation.focusPanel':\n case 'Navigation.focusPreviousPart':\n case 'Navigation.focusSideBar':\n case 'Navigation.focusStatusBar':\n case 'Navigation.focusTitleBar':\n return ModuleId.Navigatiom\n case 'Notification.create':\n case 'Notification.dispose':\n case 'Notification.handleClick':\n case 'Notification.showWithOptions':\n return ModuleId.Notification\n case 'Open.openUrl':\n return ModuleId.Open\n case 'OpenNativeFolder.openNativeFolder':\n return ModuleId.OpenNativeFolder\n case 'Preferences.hydrate':\n case 'Preferences.openKeyBindingsJson':\n case 'Preferences.openSettingsJson':\n return ModuleId.Preferences\n case 'RecentlyOpened.addToRecentlyOpened':\n case 'RecentlyOpened.clearRecentlyOpened':\n case 'RecentlyOpened.getRecentlyOpened':\n case 'RecentlyOpened.hydrate':\n return ModuleId.RecentlyOpened\n case 'SaveState.handleVisibilityChange':\n case 'SaveState.hydrate':\n return ModuleId.SaveState\n case 'ServiceWorker.hydrate':\n case 'ServiceWorker.uninstall':\n return ModuleId.ServiceWorker\n case 'SessionReplay.downloadSession':\n case 'SessionReplay.openSession':\n case 'SessionReplay.replayCurrentSession':\n case 'SessionReplay.replaySession':\n return ModuleId.SessionReplay\n case 'SessionStorage.clear':\n case 'SessionStorage.getJson':\n return ModuleId.SessionStorage\n case 'Test.execute':\n return ModuleId.Test\n case '001':\n return ModuleId.TestFramework\n case '002':\n return ModuleId.TestFrameworkComponent\n case 'TitleBarMenuBar.closeMenu':\n case 'TitleBarMenuBar.focus':\n case 'TitleBarMenuBar.focusIndex':\n case 'TitleBarMenuBar.focusNext':\n case 'TitleBarMenuBar.focusPrevious':\n case 'TitleBarMenuBar.handleKeyArrowDown':\n case 'TitleBarMenuBar.handleKeyArrowLeft':\n case 'TitleBarMenuBar.handleKeyArrowRight':\n case 'TitleBarMenuBar.handleKeyArrowUp':\n case 'TitleBarMenuBar.handleKeyEnd':\n case 'TitleBarMenuBar.handleKeyEnter':\n case 'TitleBarMenuBar.handleKeyEscape':\n case 'TitleBarMenuBar.handleKeyHome':\n case 'TitleBarMenuBar.handleKeySpace':\n case 'TitleBarMenuBar.hydrate':\n case 'TitleBarMenuBar.openMenu':\n case 'TitleBarMenuBar.toggleIndex':\n return ModuleId.TitleBarMenu\n case 'Viewlet.getAllStates':\n case 'Viewlet.openWidget':\n case 2133:\n return ModuleId.Viewlet\n case 'QuickPick.focusFirst':\n case 'QuickPick.focusLast':\n case 'QuickPick.focusNext':\n case 'QuickPick.focusPrevious':\n case 'QuickPick.handleBlur':\n case 'QuickPick.handleInput':\n case 'QuickPick.selectCurrentIndex':\n case 'QuickPick.selectIndex':\n return ModuleId.ViewletQuickPick\n case 'Window.close':\n case 'Window.exit':\n case 'Window.makeScreenshot':\n case 'Window.maximize':\n case 'Window.minimize':\n case 'Window.openNew':\n case 'Window.reload':\n case 'Window.unmaximize':\n return ModuleId.Window\n case 'Workbench.unload':\n return ModuleId.Workbench\n case 'Workspace.hydrate':\n case 'Workspace.setPath':\n case 'Workspace.setUri':\n return ModuleId.Workspace\n default:\n throw new Error(`command ${commandId} not found`)\n }\n}\n", "import * as Module from '../Module/Module.js'\nimport * as ModuleMap from '../ModuleMap/ModuleMap.js'\n\nexport const state = {\n commands: Object.create(null),\n pendingModules: Object.create(null),\n}\n\nconst initializeModule = (module) => {\n if (typeof module.__initialize__ !== 'function') {\n if (module.Commands) {\n for (const [key, value] of Object.entries(module.Commands)) {\n register(key, value)\n }\n return\n }\n throw new Error(\n `module ${module.name} is missing an initialize function and commands`\n )\n }\n return module.__initialize__()\n}\n\nconst getOrLoadModule = (moduleId) => {\n if (!state.pendingModules[moduleId]) {\n const importPromise = Module.load(moduleId)\n state.pendingModules[moduleId] = importPromise.then(initializeModule)\n }\n return state.pendingModules[moduleId]\n}\n\nconst loadCommand = (command) => getOrLoadModule(ModuleMap.getModuleId(command))\n\nexport const register = (commandId, listener) => {\n state.commands[commandId] = listener\n}\n\nconst hasThrown = new Set()\n\nexport const execute = (command, ...args) => {\n if (command in state.commands) {\n if (typeof state.commands[command] !== 'function') {\n throw new Error(`[renderer-worker] Command ${command} is not a function`)\n }\n return state.commands[command](...args)\n }\n return (\n loadCommand(command)\n // TODO can skip then block in prod (only to prevent endless loop in dev)\n .then(() => {\n if (!(command in state.commands)) {\n if (hasThrown.has(command)) {\n return\n }\n hasThrown.add(command)\n throw new Error(`Command did not register \"${command}\"`)\n }\n return execute(command, ...args)\n })\n )\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const setInlineStyle = async (id, css) => {\n await RendererProcess.invoke(\n /* Css.setInlineStyle */ 'Css.setInlineStyle',\n /* id */ id,\n /* css */ css\n )\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const setThemeColor = async (themeColor) => {\n await RendererProcess.invoke(\n /* Meta.setThemeColor */ 'Meta.setThemeColor',\n /* color */ themeColor\n )\n}\n", "import * as Command from '../Command/Command.js'\nimport * as Css from '../Css/Css.js'\nimport * as Meta from '../Meta/Meta.js'\nimport * as Platform from '../Platform/Platform.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as PlatformType from '../PlatformType/PlatformType.js'\n\n// TODO by default color theme should come from local storage, session storage, cache storage, indexeddb or blob url -> fast initial load\n// actual color theme can be computed after workbench has loaded (most times will be the same and doesn't need to be computed)\n\nconst FALLBACK_COLOR_THEME_ID = 'slime'\n\nconst getColorThemeJsonFromSharedProcess = async (colorThemeId) => {\n // const extensions = await ExtensionMeta.getExtensions()\n // for(const extension of extensions){\n // if(extension.status==='rejected'){\n // continue\n // }\n // if(!extension.colorThemes){\n // continue\n // }\n // for(const colorTheme of extension.colorThemes){\n // if(colorTheme.id !== colorThemeId){\n // continue\n // }\n // const absolutePath = `${extension.path}/${colorTheme.path}`\n // }\n // }\n return SharedProcess.invoke(\n /* ExtensionHost.getColorThemeJson */ 'ExtensionHost.getColorThemeJson',\n /* colorThemeId */ colorThemeId\n )\n}\n\nconst getColorThemeJsonFromStaticFolder = (colorThemeId) => {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/themes/${colorThemeId}.json`\n // TODO handle error ?\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n}\n\nconst getFallbackColorTheme = async () => {\n const assetDir = Platform.getAssetDir()\n const url = `${assetDir}/themes/fallback_theme.json`\n return Command.execute(/* Ajax.getJson */ 'Ajax.getJson', /* url */ url)\n}\n\n// TODO json parsing should also happen in renderer worker\n// so that all validation is here (json parsing errors, invalid shape, ...)\n\nconst getColorThemeJson = (colorThemeId) => {\n if (Platform.platform === PlatformType.Web) {\n return getColorThemeJsonFromStaticFolder(colorThemeId)\n }\n return getColorThemeJsonFromSharedProcess(colorThemeId)\n}\n\nexport const getColorThemeCss = async (colorThemeId, colorThemeJson) => {\n const colorThemeCss = await Command.execute(\n /* ColorThemeFromJson.createColorThemeFromJson */ 'ColorThemeFromJson.createColorThemeFromJson',\n /* colorThemeId */ colorThemeId,\n /* colorThemeJson */ colorThemeJson\n )\n return colorThemeCss\n // TODO generate color theme from jsonc\n}\n\nconst getMetaThemeColor = (colorThemeJson) => {\n return (\n colorThemeJson &&\n colorThemeJson.colors &&\n colorThemeJson.colors.TitleBarBackground\n )\n}\nconst applyColorTheme = async (colorThemeId) => {\n try {\n const colorThemeJson = await getColorThemeJson(colorThemeId)\n const colorThemeCss = await getColorThemeCss(colorThemeId, colorThemeJson)\n await Css.setInlineStyle('ContributedColorTheme', colorThemeCss)\n if (Platform.platform === PlatformType.Web) {\n const themeColor = getMetaThemeColor(colorThemeJson) || ''\n await Meta.setThemeColor(themeColor)\n }\n } catch (error) {\n throw new Error(`Failed to apply color theme \"${colorThemeId}\": ${error}`)\n }\n}\n\nexport const setColorTheme = async (colorThemeId) => {\n await applyColorTheme(colorThemeId)\n // TODO should preferences throw errors or should it call handleError directly?\n await Preferences.set('workbench.colorTheme', colorThemeId)\n}\n\n// TODO test this, and also the error case\n// TODO have icon theme, color theme together (maybe)\nexport const hydrate = async () => {\n const colorThemeId = Preferences.get('workbench.colorTheme')\n try {\n await applyColorTheme(colorThemeId)\n } catch (error) {\n if (colorThemeId === FALLBACK_COLOR_THEME_ID) {\n throw error\n }\n console.warn(error)\n await applyColorTheme(FALLBACK_COLOR_THEME_ID)\n }\n}\n", "export const mark = (id) => {\n performance.mark(id)\n}\n\nexport const measure = (measureName, start, end) => {\n performance.measure(measureName, start, end)\n}\n", "import * as RendererProcess from '../RendererProcess/RendererProcess.js'\n\nexport const getInitData = async () => {\n const rendererProcessInitData = await RendererProcess.invoke(\n 'InitData.getInitData'\n )\n // TODO get the following items\n // - location.href\n // - workspace\n // - color theme\n // - preferences\n // - restoredState\n // - layout bounds\n // - keybindings\n // - icon theme\n // - languages\n return rendererProcessInitData\n}\n", "import * as ColorTheme from '../ColorTheme/ColorTheme.js'\nimport * as IconTheme from '../IconTheme/IconTheme.js'\nimport * as KeyBindings from '../KeyBindings/KeyBindings.js'\nimport * as Layout from '../Layout/Layout.js'\nimport * as LifeCycle from '../LifeCycle/LifeCycle.js'\nimport * as Performance from '../Performance/Performance.js'\nimport * as Preferences from '../Preferences/Preferences.js'\nimport * as RendererProcess from '../RendererProcess/RendererProcess.js'\nimport * as SaveState from '../SaveState/SaveState.js'\nimport * as ServiceWorker from '../ServiceWorker/ServiceWorker.js'\nimport * as SharedProcess from '../SharedProcess/SharedProcess.js'\nimport * as Workspace from '../Workspace/Workspace.js'\nimport * as RecentlyOpened from '../RecentlyOpened/RecentlyOpened.js'\nimport * as Location from '../Location/Location.js'\nimport * as ErrorHandling from '../ErrorHandling/ErrorHandling.js'\nimport * as SessionReplay from '../SessionReplay/SessionReplay.js'\nimport * as InitData from '../InitData/InitData.js'\nimport * as Command from '../Command/Command.js'\nimport * as Platform from '../Platform/Platform.js'\n\nconst handleUnhandledRejection = async (event) => {\n console.info(`[renderer-worker] Unhandled Rejection: ${event.reason}`)\n try {\n await ErrorHandling.handleError(event.reason)\n } catch {}\n}\n\nconst handleError = async (event) => {\n console.info(`[renderer-worker] Unhandled Error: ${event}`)\n try {\n await ErrorHandling.handleError(event.reason)\n } catch {}\n}\n\n// TODO lazyload parts one by one (Main, SideBar, ActivityBar, TitleBar, StatusBar)\nexport const startup = async (config) => {\n onunhandledrejection = handleUnhandledRejection\n onerror = handleError\n LifeCycle.mark(LifeCycle.Phase.Zero)\n\n Performance.mark('willStartupWorkbench')\n await RendererProcess.listen()\n await SharedProcess.listen()\n\n LifeCycle.mark(LifeCycle.Phase.One)\n\n const initData = await InitData.getInitData()\n\n Performance.mark('code/willLoadPreferences')\n await Preferences.hydrate()\n Performance.mark('code/didLoadPreferences')\n\n // TODO only load this if session replay is enabled in preferences\n if (Preferences.get('sessionReplay.enabled')) {\n Performance.mark('code/willLoadSessionReplay')\n await SessionReplay.startRecording()\n Performance.mark('code/didLoadSessionReplay')\n }\n\n LifeCycle.mark(LifeCycle.Phase.Twelve)\n\n Performance.mark('code/willOpenWorkspace')\n await Workspace.hydrate(initData.Location)\n Performance.mark('code/didOpenWorkspace')\n\n LifeCycle.mark(LifeCycle.Phase.Three)\n\n Performance.mark('code/willLoadColorTheme')\n await ColorTheme.hydrate()\n Performance.mark('code/didLoadColorTheme')\n\n LifeCycle.mark(LifeCycle.Phase.Four)\n\n Performance.mark('code/willShowLayout')\n await Layout.hydrate(initData)\n Performance.mark('code/didShowLayout')\n\n LifeCycle.mark(LifeCycle.Phase.Five)\n\n Performance.mark('code/willLoadMain')\n await Layout.showMain()\n Performance.mark('code/didLoadMain')\n\n LifeCycle.mark(LifeCycle.Phase.Six)\n\n Performance.mark('code/willLoadKeyBindings')\n await KeyBindings.hydrate()\n Performance.mark('code/didLoadKeyBindings')\n\n LifeCycle.mark(LifeCycle.Phase.Seven)\n\n Performance.mark('code/willLoadSideBar')\n if (Layout.state.sideBarVisible) {\n await Layout.showSideBar()\n }\n Performance.mark('code/didLoadSideBar')\n\n LifeCycle.mark(LifeCycle.Phase.Eight)\n\n Performance.mark('code/willLoadPanel')\n if (Layout.state.panelVisible) {\n await Layout.showPanel()\n }\n Performance.mark('code/didLoadPanel')\n\n LifeCycle.mark(LifeCycle.Phase.Nine)\n\n Performance.mark('code/willLoadActivityBar')\n if (Layout.state.activityBarVisible) {\n await Layout.showActivityBar()\n }\n Performance.mark('code/didLoadActivityBar')\n\n LifeCycle.mark(LifeCycle.Phase.Ten)\n\n Performance.mark('code/willLoadStatusBar')\n if (Layout.state.statusBarVisible) {\n await Layout.showStatusBar()\n }\n Performance.mark('code/didLoadStatusBar')\n\n LifeCycle.mark(LifeCycle.Phase.Eleven)\n\n Performance.mark('code/willLoadIconTheme')\n // TODO check preferences if icon theme is enabled\n await IconTheme.hydrate()\n Performance.mark('code/didLoadIconTheme')\n\n LifeCycle.mark(LifeCycle.Phase.Twelve)\n\n LifeCycle.mark(LifeCycle.Phase.Thirteen)\n\n LifeCycle.mark(LifeCycle.Phase.Fourteen)\n\n Performance.mark('code/willLoadTitleBar')\n if (Layout.state.titleBarVisible) {\n await Layout.showTitleBar()\n }\n Performance.mark('code/didLoadTitleBar')\n\n LifeCycle.mark(LifeCycle.Phase.Fifteen)\n\n if (Workspace.isTest()) {\n const testPath = await Platform.getTestPath()\n const jsPath = initData.Location.href\n .replace('/tests', `${testPath}/src`)\n .replace(/\\.html$/, '.js')\n await Command.execute('Test.execute', jsPath)\n } else {\n Performance.mark('code/willLoadSaveState')\n await SaveState.hydrate()\n Performance.mark('code/didLoadSaveState')\n }\n\n LifeCycle.mark(LifeCycle.Phase.Sixteen)\n\n Performance.mark('code/willLoadRecentlyOpened')\n await RecentlyOpened.hydrate()\n Performance.mark('code/didLoadRecentlyOpened')\n\n // TODO tree shake out service worker in electron build\n\n Performance.mark('code/willLoadServiceWorker')\n await ServiceWorker.hydrate()\n Performance.mark('code/didLoadServiceWorker')\n\n Performance.mark('code/willLoadLocation')\n await Location.hydrate()\n Performance.mark('code/didLoadLocation')\n\n Performance.measure(\n 'code/loadKeyBindings',\n 'code/willLoadKeyBindings',\n 'code/didLoadKeyBindings'\n )\n Performance.measure(\n 'code/openWorkspace',\n 'code/willOpenWorkspace',\n 'code/didOpenWorkspace'\n )\n Performance.measure('code/loadMain', 'code/willLoadMain', 'code/didLoadMain')\n Performance.measure(\n 'code/loadSideBar',\n 'code/willLoadSideBar',\n 'code/didLoadSideBar'\n )\n Performance.measure(\n 'code/showLayout',\n 'code/willShowLayout',\n 'code/didShowLayout'\n )\n Performance.measure(\n 'code/loadPanel',\n 'code/willLoadPanel',\n 'code/didLoadPanel'\n )\n Performance.measure(\n 'code/loadActivityBar',\n 'code/willLoadActivityBar',\n 'code/didLoadActivityBar'\n )\n Performance.measure(\n 'code/loadStatusBar',\n 'code/willLoadStatusBar',\n 'code/didLoadStatusBar'\n )\n Performance.measure(\n 'code/loadPreferences',\n 'code/willLoadPreferences',\n 'code/didLoadPreferences'\n )\n Performance.measure(\n 'code/loadColorTheme',\n 'code/willLoadColorTheme',\n 'code/didLoadColorTheme'\n )\n Performance.measure(\n 'code/loadIconTheme',\n 'code/willLoadIconTheme',\n 'code/didLoadIconTheme'\n )\n}\n", "import * as Workbench from './parts/Workbench/Workbench.js'\n\nconst main = async () => {\n await Workbench.startup({})\n}\n\nmain()\n"],
|
|
5
|
+
"mappings": "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,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AACH,iBAAgB;AAAA,aACb;AAAA,aACA;AAAA,aACA;AACH,iBAAgB;AAAA,aACb;AA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",
|
|
6
|
+
"names": ["Blob", "Viewlet", "resolve", "reject", "fn", "type", "type", "state", "resolve", "reject", "id", "listen", "listen", "listen", "state", "listen", "ipc", "resolve", "reject", "Commands", "fn", "x", "decode", "Commands", "decode", "type", "base64StringToBlob", "Commands", "base64StringToBlob", "invoke", "resolve", "reject", "type", "state", "resolve", "reject", "port", "handleMessage", "create", "resolve", "handleMessage", "create", "name", "resolve", "reject", "handleMessage", "create", "resolve", "handleMessage", "create", "ipc", "handleMessage", "Methods", "getModule", "create", "state", "getIpc", "listen", "send", "invoke", "create", "Methods", "ipc", "getPlatform", "platform", "invoke", "getJson", "platform", "Commands", "getJson", "Commands", "type", "files", "invoke", "Commands", "Commands", "Commands", "Commands", "state", "getIpc", "invoke", "create", "Methods", "ipc", "restoredError", "invoke", "invoke", "invoke", "platform", "stop", "platform", "Commands", "stop", "state", "fn", "state", "Extensions", "Main", "state", "invoke", "platform", "state", "getLanguages", "hydrate", "getLanguageConfiguration", "language", "resolve", "editor", "state", "id", "language", "invoke", "platform", "array", "start", "getText", "state", "create", "id", "invoke", "create", "Methods", "create", "Methods", "create", "Methods", "create", "Methods", "create", "Methods", "Methods", "getModule", "restoreError", "handleMessage", "listen", "restoredError", "ipc", "method", "invoke", "create", "Methods", "canActivate", "ipc", "name", "Methods", "state", "name", "ipc", "listen", "canActivate", "ipc", "name", "Methods", "hydrate", "invoke", "close", "invoke", "reload", "minimize", "maximize", "unmaximize", "close", "exit", "openNew", "platform", "state", "hydrate", "invoke", "platform", "state", "platform", "editor", "getText", "handleEditorChange", "handleWorkspaceChange", "execute", "combineResults", "getPathSeparator", "remove", "readFile", "writeFile", "readFile", "writeFile", "getText", "getJson", "setJson", "LocalStorage", "SessionStorage", "clear", "getText", "getJson", "setText", "setJson", "LocalStorage", "getPathSeparator", "mkdir", "name", "readDirWithFileTypes", "readFile", "remove", "rename", "writeFile", "invoke", "platform", "getPath", "platform", "getText", "readFile", "writeFile", "mkdir", "error", "readFile", "writeFile", "readFile", "writeFile", "resolve", "reject", "object", "name", "target", "state", "db", "state", "handleMessage", "startRecording", "events", "invoke", "resolve", "reject", "now", "ipc", "name", "readFile", "writeFile", "getPathSeparator", "mkdir", "name", "readDirWithFileTypes", "readFile", "remove", "rename", "writeFile", "getModule", "readFile", "getBlobUrl", "getPathSeparator", "name", "readDirWithFileTypes", "readFile", "state", "getType", "createFile", "createFolder", "getPathSeparator", "mkdir", "name", "readDirWithFileTypes", "readFile", "remove", "rename", "state", "writeFile", "id", "copy", "ensureFile", "getBlobUrl", "getPathSeparator", "mkdir", "name", "readDirWithFileTypes", "readFile", "remove", "rename", "writeFile", "chmod", "getPathSeparator", "mkdir", "name", "readDirWithFileTypes", "readFile", "remove", "state", "writeFile", "getDirent", "state", "readFile", "remove", "rename", "mkdir", "writeFile", "readDirWithFileTypes", "getBlobUrl", "copy", "getRealPath", "stat", "chmod", "state", "hydrate", "set", "platform", "invoke", "writeFile", "File", "state", "hydrate", "platform", "invoke", "File", "state", "state", "x", "y", "readDirWithFileTypes", "newDirent", "name", "create", "getPathSeparator", "id", "state", "remove", "newDirent", "rename", "type", "writeFile", "mkdir", "state2", "getState", "x", "y", "getRealPath", "stat", "files", "state3", "copy", "dirent", "fn", "create", "editor", "fn", "state", "dirent", "childDirents", "state", "state", "state", "state", "state", "state", "state", "x", "y", "state", "x", "y", "state", "x", "y", "mergeDirents", "files", "from", "copy", "state", "state", "files", "from", "copy", "state", "x", "y", "files", "Commands", "create", "name", "name", "create", "loadContent", "contentLoaded", "dispose", "resize", "id", "state", "Commands", "contentLoaded", "create", "dispose", "loadContent", "name", "resize", "invoke", "textSearch", "textSearch", "File", "name", "create", "loadContent", "contentLoaded", "dispose", "getPath", "handleContextMenuMouseAt", "handleContextMenuKeyboard", "handleClick", "hasFunctionalResize", "resize", "hasFunctionalRender", "renderItems", "render", "id", "state", "textSearch", "File", "x", "y", "Commands", "contentLoaded", "create", "dispose", "handleClick", "handleContextMenuKeyboard", "handleContextMenuMouseAt", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "name", "create", "dispose", "acceptInput", "getChangedFiles", "loadContent", "contentLoaded", "handleClick", "hasFunctionalResize", "resize", "hasFunctionalRender", "render", "state", "readFile", "Commands", "acceptInput", "contentLoaded", "create", "dispose", "handleClick", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "state", "create", "name", "create", "loadContent", "contentLoaded", "dispose", "resize", "clear", "state", "send", "invoke", "Commands", "clear", "contentLoaded", "create", "dispose", "loadContent", "name", "resize", "name", "create", "loadContent", "contentLoaded", "dispose", "state", "Commands", "contentLoaded", "create", "dispose", "loadContent", "name", "id", "invoke", "state", "name", "create", "getVisible", "loadContent", "contentLoaded", "getIcon", "getId", "dispose", "getExtensions", "handleInput", "hasFunctionalResize", "resize", "setDeltaY", "handleWheel", "hasFunctionalRender", "renderFocusedIndex", "render", "id", "state", "platform", "x", "y", "focusIndex", "state", "focusFirst", "state", "focusIndex", "focusLast", "state", "focusIndex", "focusNext", "state", "focusIndex", "state", "focusIndex", "focusPrevious", "state", "focusIndex", "state", "focusIndex", "handleClick", "state", "focusIndex", "Commands", "contentLoaded", "create", "dispose", "handleInput", "handleWheel", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "setDeltaY", "Imports", "state", "getWebExtensionManifest", "invoke", "ipc", "platform", "invoke", "create", "dispose", "setValue", "state", "update", "getText", "name", "create", "loadContent", "contentLoaded", "handleData", "dispose", "handleError", "state", "invoke", "FindWidget", "Commands", "contentLoaded", "create", "dispose", "handleData", "handleError", "loadContent", "name", "combineResults", "editor", "name", "create", "loadContent", "contentLoaded", "focusIndex", "dispose", "hasFunctionalRender", "renderFocusedIndex", "render", "state", "editor", "Commands", "contentLoaded", "create", "dispose", "focusIndex", "hasFunctionalRender", "loadContent", "name", "render", "create", "loadContent", "contentLoaded", "dispose", "id", "state", "Commands", "contentLoaded", "create", "dispose", "loadContent", "state", "getVisible", "editor", "visibleCursors", "setDeltaY", "editor", "fn", "array", "start", "getVisible", "init_EditorSelection", "newPosition", "editor", "i", "tokenizeLine", "getVisible", "editor", "tokenizeLine", "type", "TokenMap", "start", "MINIMUM_SLIDER_SIZE", "create", "setDeltaY", "getScrollBarHeight", "setText", "render", "init_EditorSelection", "id", "editor", "getVisible", "combineResults", "editor", "name", "create", "loadContent", "contentLoaded", "contentLoadedEffects", "handleLanguagesChanged", "resize", "hasFunctionalRender", "render", "focus", "readFile", "state", "setState", "id", "setText", "editor", "editor", "removeListener", "state", "editor", "fn", "combineResults", "editor", "editor", "origin", "start", "combineResults", "editor", "editor", "x", "y", "state", "editor", "x", "y", "editor", "changes", "editor", "editor", "x", "y", "editor", "editor", "moveRangeToPosition", "moveRangeToPosition", "editor", "create", "create", "editor", "getNewSelections", "editor", "editor", "getNewSelections", "editor", "editor", "editor", "editor", "getNewSelections", "editor", "getPosition", "getEdgePosition", "editor", "editor", "editor", "editor", "editor", "editor", "editor", "changes", "editor", "getChanges", "editor", "changes", "start", "editor", "editor", "editor", "editor", "editor", "editor", "editor", "close", "open", "handleBlur", "editor", "x", "y", "create", "load", "removeListener", "dispose", "state", "editor", "editor", "editor", "invoke", "combineResults", "editor", "editor", "editor", "getLocation", "getNoLocationFoundMessage", "getErrorMessage", "isNoProviderFoundError", "displayErrorMessage", "getErrorMessage", "editor", "combineResults", "editor", "UiStrings", "getLocation", "getNoLocationFoundMessage", "getErrorMessage", "isNoProviderFoundError", "editor", "editor", "getChanges", "editor", "RE_WORD_START", "RE_WORD_END", "getNewSelections", "editor", "editor", "x", "y", "editor", "x", "y", "getTokenIndex", "editor", "x", "y", "editor", "state", "getNewDeltaPercent", "editor", "y", "getNewPercent", "editor", "y", "state", "state", "getNewSelections", "editor", "editor", "newSelections", "state", "x", "y", "getChanges", "line", "editor", "getErrorMessage", "editor", "state", "RE_CHARACTER", "editor", "getChanges", "i", "editor", "editor", "state", "editor", "editor", "state", "setDeltaYFixedValue", "editor", "setDeltaY", "editor", "state", "setDeltaYFixedValue", "getNewSelections", "editor", "editor", "x", "y", "getChanges", "i", "editor", "getChanges", "start", "editor", "editor", "editor", "editor", "state", "editor", "x", "y", "editor", "x", "y", "editor", "editor", "editor", "getText", "writeFile", "editor", "getNewSelections", "start", "newSelections", "editor", "getNewSelections", "editor", "editor", "getNewSelections", "editor", "editor", "editor", "getNewSelections", "editor", "RE_ALPHA_NUMERIC", "isAlphaNumeric", "getWordStartIndex", "getWordEndIndex", "getWordMatchAtPosition", "line", "endColumnIndex", "start", "editor", "getSelectUpChanges", "editor", "editor", "editor", "editor", "editor", "start", "editor", "editor", "getLanguageConfiguration", "line", "startColumnIndex", "endColumnIndex", "RE_WHITESPACE_AT_START", "editor", "getLanguageConfiguration", "editor", "editor", "editor", "documentEdits", "cursorEdits", "start", "Commands", "contentLoaded", "contentLoadedEffects", "create", "focus", "hasFunctionalRender", "loadContent", "name", "render", "resize", "Imports", "name", "create", "loadContent", "contentLoaded", "dispose", "hasFunctionalRender", "render", "id", "state", "readFile", "Commands", "contentLoaded", "create", "dispose", "hasFunctionalRender", "loadContent", "name", "render", "name", "create", "loadContent", "contentLoaded", "dispose", "hasFunctionalRender", "render", "id", "state", "Commands", "contentLoaded", "create", "dispose", "hasFunctionalRender", "loadContent", "name", "render", "name", "create", "loadContent", "contentLoaded", "dispose", "id", "state", "update", "Commands", "contentLoaded", "create", "dispose", "loadContent", "name", "UiStrings", "name", "create", "loadContent", "contentLoaded", "contentLoadedEffects", "dispose", "handleContextMenu", "hasFunctionalResize", "resize", "renderFocusedIndex", "render", "hasFunctionalRender", "state", "id", "activityBarItem", "x", "y", "focusIndex", "state", "focus", "state", "focusIndex", "focusFirst", "state", "focusIndex", "focusLast", "state", "focusIndex", "focusNext", "state", "focusIndex", "focusPrevious", "state", "focusIndex", "handleClick", "state", "x", "y", "getPosition", "state", "handleClick", "Commands", "contentLoaded", "contentLoadedEffects", "create", "dispose", "handleContextMenu", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "Imports", "name", "create", "loadContent", "contentLoaded", "dispose", "selectIndex", "hasFunctionalRender", "render", "hasFunctionalResize", "resize", "state", "id", "load", "Commands", "contentLoaded", "create", "dispose", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "selectIndex", "state", "create", "loadContent", "contentLoaded", "openViewlet", "dispose", "close", "resize", "focus", "id", "state", "load", "Commands", "close", "contentLoaded", "create", "dispose", "focus", "loadContent", "openViewlet", "resize", "None", "UiStrings", "None", "UiStrings", "getMenuEntries", "None", "UiStrings", "getMenuEntries", "None", "UiStrings", "getMenuEntries", "getFocusedDirent", "None", "getState", "UiStrings", "getMenuEntries", "None", "getMenuEntries", "UiStrings", "getMenuEntries", "None", "UiStrings", "getMenuEntries", "None", "UiStrings", "getMenuEntries", "None", "getMenuEntries", "UiStrings", "getMenuEntries", "None", "UiStrings", "getMenuEntries", "None", "getMenuEntries", "UiStrings", "editor", "None", "getMenuEntries", "getMenuEntries", "UiStrings", "None", "platform", "getMenuEntries", "getMenuEntries", "toContextMenuItem", "None", "UiStrings", "getMenuEntries", "None", "getModule", "getMenuEntries", "id", "state", "focusIndex", "focus", "focusPrevious", "getIndexToFocusNextStartingAt", "focusNext", "focusFirst", "focusLast", "getMenuEntries", "id", "x", "y", "selectCurrent", "name", "create", "loadContent", "contentLoaded", "focus", "dispose", "resize", "state", "Commands", "contentLoaded", "create", "dispose", "focus", "loadContent", "name", "resize", "state", "register", "execute", "id", "create", "combineResults", "id", "register", "execute", "name", "create", "loadContent", "contentLoaded", "contentLoadedEffects", "getIndex", "handleClick", "hasFunctionalResize", "resize", "hasFunctionalRender", "renderItems", "render", "state", "Commands", "contentLoaded", "contentLoadedEffects", "create", "handleClick", "hasFunctionalRender", "hasFunctionalResize", "loadContent", "name", "render", "resize", "hydrateLazy", "name", "create", "loadContent", "contentLoaded", "handleDrop", "dispose", "focusIndex", "focusFirst", "focusLast", "focusPrevious", "focusNext", "resize", "state", "hydrate", "id", "restoredEditor", "editor", "load", "focus", "instance", "invoke", "x", "y", "Commands", "contentLoaded", "create", "dispose", "focusFirst", "focusIndex", "focusLast", "focusNext", "focusPrevious", "handleDrop", "loadContent", "name", "resize", "combineResults", "editor", "create", "filterCompletionItems", "loadContent", "handleError", "contentLoaded", "handleSelectionChange", "advance", "selectIndex", "focusIndex", "focusFirst", "focusLast", "focusPrevious", "focusNext", "dispose", "hasFunctionalRender", "renderItems", "render", "id", "editor", "getState", "state", "x", "y", "Commands", "advance", "contentLoaded", "create", "dispose", "focusFirst", "focusIndex", "focusLast", "focusNext", "focusPrevious", "handleError", "handleSelectionChange", "hasFunctionalRender", "loadContent", "render", "selectIndex", "combineResults", "editor", "contentLoaded", "create", "dispose", "focusFirst", "focusIndex", "focusLast", "focusNext", "focusPrevious", "hasFunctionalRender", "loadContent", "name", "render", "selectCurrent", "selectIndex", "getName", "renderMessage", "renderFocusedIndex", "id", "state", "getReferences", "name", "create", "loadContent", "contentLoaded", "dispose", "hasFunctionalRender", "render", "editor", "state", "Commands", "contentLoaded", "create", "dispose", "hasFunctionalRender", "loadContent", "name", "render", "combineResults", "editor", "name", "create", "loadContent", "contentLoaded", "dispose", "hasFunctionalRender", "render", "editor", "state", "Commands", "contentLoaded", "create", "dispose", "hasFunctionalRender", "loadContent", "name", "render", "name", "id", "getFilterValue", "getLabel", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "platform", "builtinPicks", "id", "getFilterValue", "getHelpEntries", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "getFilterValue", "getHelpEntries", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "getFilterValue", "getHelpEntries", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "getFilterValue", "getHelpEntries", "getPicks", "getPlaceholder", "selectPick", "files", "invoke", "platform", "getFilterValue", "getHelpEntries", "getLabel", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "searchFile", "openUri", "getIcon", "files", "state", "getFilterValue", "getHelpEntries", "getLabel", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "state", "getHelpEntries", "getNoResults", "getPicks", "getPlaceholder", "name", "selectPick", "getFilterValue", "getHelpEntries", "getLabel", "getNoResults", "getPicks", "getPlaceholder", "selectPick", "getRecentlyOpened", "toPick", "getFilterValue", "getLabel", "getNoResults", "getPicks", "getPlaceholder", "selectPick", "setColorTheme", "toPick", "platform", "invoke", "id", "name", "create", "getVisible", "getProvider", "loadContent", "contentLoaded", "dispose", "handleBlur", "selectIndex", "handleInput", "RE_ALPHA_NUMERIC", "isAlphaNumeric", "setDeltaY", "handleWheel", "hasFunctionalRender", "renderValue", "renderItems", "renderFocusedIndex", "renderHeight", "render", "id", "state", "newValue", "before", "after", "focusIndex", "state", "minLineY", "maxLineY", "focusFirst", "state", "focusIndex", "focusLast", "state", "focusIndex", "focusNext", "state", "focusIndex", "focusPrevious", "state", "focusIndex", "Commands", "contentLoaded", "create", "dispose", "handleBlur", "handleInput", "handleWheel", "hasFunctionalRender", "loadContent", "name", "render", "selectIndex", "setDeltaY", "Imports", "load", "Extensions", "Main", "ViewletState", "create", "render", "getModule", "id", "focus", "state", "register", "newState", "error", "send", "dispose", "resize", "getState", "setState", "id", "fn", "render", "hasInstance", "type", "load", "state", "clamp", "hydrate", "id", "create", "load", "dispose", "x", "y", "resize", "state", "show", "selectIndex", "selectItem", "selectCurrent", "hide", "handleMouseEnter", "handleMouseLeave", "focusIndex", "focusFirst", "focusLast", "getIndexToFocusPreviousStartingAt", "focusPrevious", "focusNext", "x", "y", "id", "getMenuEntries", "None", "fn", "show", "x", "y", "id", "hide", "Commands", "show", "number", "open", "invoke", "clearCache", "name", "platform", "invoke", "state", "hydrate", "open", "Commands", "clearCache", "invoke", "open", "invoke", "state", "close", "handleClick", "platform", "open", "Commands", "close", "handleClick", "Commands", "hydrate", "Commands", "hydrate", "show", "editor", "x", "y", "Commands", "show", "editor", "rename", "open", "editor", "x", "y", "start", "Commands", "open", "Commands", "Commands", "Commands", "Commands", "Commands", "chmod", "mkdir", "readDirWithFileTypes", "readFile", "remove", "writeFile", "Commands", "create", "dispose", "setValue", "hydrate", "platform", "Commands", "hydrate", "Commands", "hydrate", "state", "show", "hide", "getBlobUrl", "Commands", "hide", "show", "hydrate", "Commands", "hydrate", "getKeyBindings", "Commands", "getKeyBindings", "Commands", "hydrate", "Commands", "execute", "Commands", "clear", "getJson", "getText", "setJson", "setText", "Commands", "focusFirst", "focusIndex", "focusLast", "focusNext", "focusPrevious", "handleMouseEnter", "handleMouseLeave", "hide", "selectIndex", "selectItem", "show", "state", "fn", "Commands", "state", "create", "handleClick", "dispose", "type", "id", "Commands", "create", "dispose", "handleClick", "platform", "Commands", "Commands", "Commands", "hydrate", "isValid", "getRecentlyOpened", "hydrate", "readFile", "writeFile", "invoke", "platform", "Commands", "getRecentlyOpened", "hydrate", "clear", "getJson", "setJson", "SessionStorage", "hydrate", "state", "setJson", "Commands", "hydrate", "hydrate", "uninstall", "platform", "Commands", "hydrate", "uninstall", "Commands", "Commands", "clear", "getJson", "selectItem", "expandRecursively", "focus", "focusFirst", "focusIndex", "focusLast", "focusNext", "handleArrowLeft", "newFile", "removeDirent", "addNodeExtension", "addWebExtension", "chmod", "getTmpDir", "mkdir", "writeFile", "openUri", "setPath", "focusIndex", "focusNext", "focusPrevious", "open", "selectItem", "setValue", "setValue", "open", "id", "execute", "id", "getNodePath", "update", "create", "create", "getTmpDir", "name", "fn", "state", "id", "execute", "object", "Commands", "execute", "Commands", "focus", "focusIndex", "focusNext", "focusPrevious", "Commands", "send", "Commands", "close", "exit", "maximize", "minimize", "openNew", "reload", "unmaximize", "Commands", "Commands", "hydrate", "load", "Blob", "Viewlet", "Blob", "Viewlet", "state", "register", "load", "id", "invoke", "platform", "set", "mark", "id", "start", "handleError", "mark", "listen", "hydrate", "startRecording", "state"]
|
|
7
|
+
}
|