monaco-editor-core 0.54.0 → 0.55.0-dev-20251008

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.
Files changed (264) hide show
  1. package/esm/nls.messages.de.js +1 -1
  2. package/esm/nls.messages.es.js +1 -1
  3. package/esm/nls.messages.fr.js +1 -1
  4. package/esm/nls.messages.it.js +1 -1
  5. package/esm/nls.messages.ja.js +1 -1
  6. package/esm/nls.messages.ko.js +1 -1
  7. package/esm/nls.messages.ru.js +1 -1
  8. package/esm/nls.messages.zh-cn.js +1 -1
  9. package/esm/nls.messages.zh-tw.js +1 -1
  10. package/esm/vs/base/browser/canIUse.js +1 -0
  11. package/esm/vs/base/browser/canIUse.js.map +1 -1
  12. package/esm/vs/base/browser/dom.js +9 -0
  13. package/esm/vs/base/browser/dom.js.map +1 -1
  14. package/esm/vs/base/browser/fastDomNode.js.map +1 -1
  15. package/esm/vs/base/browser/mouseEvent.js +3 -0
  16. package/esm/vs/base/browser/mouseEvent.js.map +1 -1
  17. package/esm/vs/base/browser/trustedTypes.js +2 -0
  18. package/esm/vs/base/browser/trustedTypes.js.map +1 -1
  19. package/esm/vs/base/browser/ui/list/listWidget.js +5 -5
  20. package/esm/vs/base/browser/ui/list/listWidget.js.map +1 -1
  21. package/esm/vs/base/browser/ui/sash/sash.css +1 -1
  22. package/esm/vs/base/browser/ui/sash/sash.js +4 -0
  23. package/esm/vs/base/browser/ui/sash/sash.js.map +1 -1
  24. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js +1 -1
  25. package/esm/vs/base/browser/ui/scrollbar/scrollableElement.js.map +1 -1
  26. package/esm/vs/base/browser/ui/table/table.css +2 -2
  27. package/esm/vs/base/browser/ui/tree/abstractTree.js +5 -4
  28. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  29. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +6 -4
  30. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  31. package/esm/vs/base/browser/ui/tree/dataTree.js.map +1 -1
  32. package/esm/vs/base/browser/ui/tree/indexTreeModel.js +1 -1
  33. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  34. package/esm/vs/base/browser/ui/tree/media/tree.css +2 -2
  35. package/esm/vs/base/browser/ui/tree/objectTree.js.map +1 -1
  36. package/esm/vs/base/browser/webWorkerFactory.js +3 -0
  37. package/esm/vs/base/browser/webWorkerFactory.js.map +1 -1
  38. package/esm/vs/base/common/buffer.js.map +1 -1
  39. package/esm/vs/base/common/decorators.js +1 -0
  40. package/esm/vs/base/common/decorators.js.map +1 -1
  41. package/esm/vs/base/common/errors.js +1 -0
  42. package/esm/vs/base/common/errors.js.map +1 -1
  43. package/esm/vs/base/common/glob.js +1 -1
  44. package/esm/vs/base/common/glob.js.map +1 -1
  45. package/esm/vs/base/common/hash.js.map +1 -1
  46. package/esm/vs/base/common/hotReload.js +2 -0
  47. package/esm/vs/base/common/hotReload.js.map +1 -1
  48. package/esm/vs/base/common/hotReloadHelpers.js +1 -0
  49. package/esm/vs/base/common/hotReloadHelpers.js.map +1 -1
  50. package/esm/vs/base/common/lifecycle.js +19 -0
  51. package/esm/vs/base/common/lifecycle.js.map +1 -1
  52. package/esm/vs/base/common/map.js.map +1 -1
  53. package/esm/vs/base/common/marshalling.js +4 -0
  54. package/esm/vs/base/common/marshalling.js.map +1 -1
  55. package/esm/vs/base/common/network.js +1 -0
  56. package/esm/vs/base/common/network.js.map +1 -1
  57. package/esm/vs/base/common/normalization.js +39 -0
  58. package/esm/vs/base/common/normalization.js.map +1 -0
  59. package/esm/vs/base/common/objects.js +1 -0
  60. package/esm/vs/base/common/objects.js.map +1 -1
  61. package/esm/vs/base/common/observableInternal/changeTracker.js +4 -0
  62. package/esm/vs/base/common/observableInternal/changeTracker.js.map +1 -1
  63. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -0
  64. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  65. package/esm/vs/base/common/observableInternal/debugName.js +1 -0
  66. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  67. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js +1 -0
  68. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js.map +1 -1
  69. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js +1 -0
  70. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js.map +1 -1
  71. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js +1 -0
  72. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js.map +1 -1
  73. package/esm/vs/base/common/observableInternal/observables/derived.js +7 -1
  74. package/esm/vs/base/common/observableInternal/observables/derived.js.map +1 -1
  75. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +2 -0
  76. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  77. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -0
  78. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
  79. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +1 -0
  80. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
  81. package/esm/vs/base/common/process.js.map +1 -1
  82. package/esm/vs/base/common/product.js.map +1 -1
  83. package/esm/vs/base/common/types.js +2 -0
  84. package/esm/vs/base/common/types.js.map +1 -1
  85. package/esm/vs/base/common/worker/webWorker.js +26 -14
  86. package/esm/vs/base/common/worker/webWorker.js.map +1 -1
  87. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js +2 -0
  88. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js.map +1 -0
  89. package/esm/vs/editor/browser/config/editorConfiguration.js +3 -2
  90. package/esm/vs/editor/browser/config/editorConfiguration.js.map +1 -1
  91. package/esm/vs/editor/browser/config/migrateOptions.js +1 -1
  92. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  93. package/esm/vs/editor/browser/controller/editContext/native/editContextFactory.js.map +1 -1
  94. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js +2 -0
  95. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js.map +1 -1
  96. package/esm/vs/editor/browser/controller/mouseHandler.js +2 -1
  97. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  98. package/esm/vs/editor/browser/controller/mouseTarget.js +7 -0
  99. package/esm/vs/editor/browser/controller/mouseTarget.js.map +1 -1
  100. package/esm/vs/editor/browser/controller/pointerHandler.js.map +1 -1
  101. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  102. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  103. package/esm/vs/editor/browser/editorDom.js.map +1 -1
  104. package/esm/vs/editor/browser/editorExtensions.js.map +1 -1
  105. package/esm/vs/editor/browser/gpu/gpuUtils.js +1 -0
  106. package/esm/vs/editor/browser/gpu/gpuUtils.js.map +1 -1
  107. package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -0
  108. package/esm/vs/editor/browser/gpu/viewGpuContext.js.map +1 -1
  109. package/esm/vs/editor/browser/services/abstractCodeEditorService.js.map +1 -1
  110. package/esm/vs/editor/browser/services/bulkEditService.js.map +1 -1
  111. package/esm/vs/editor/browser/services/codeEditorService.js.map +1 -1
  112. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  113. package/esm/vs/editor/browser/services/hoverService/hover.css +2 -0
  114. package/esm/vs/editor/browser/services/hoverService/hoverService.js.map +1 -1
  115. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js +1 -1
  116. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js.map +1 -1
  117. package/esm/vs/editor/browser/services/inlineCompletionsService.js +8 -8
  118. package/esm/vs/editor/browser/services/inlineCompletionsService.js.map +1 -1
  119. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  120. package/esm/vs/editor/browser/view/viewLayer.js +1 -1
  121. package/esm/vs/editor/browser/view/viewLayer.js.map +1 -1
  122. package/esm/vs/editor/browser/view.js.map +1 -1
  123. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +1 -0
  124. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  125. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +1 -0
  126. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js.map +1 -1
  127. package/esm/vs/editor/browser/widget/codeEditor/codeEditorContributions.js.map +1 -1
  128. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +4 -1
  129. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  130. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -0
  131. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js.map +1 -1
  132. package/esm/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.js.map +1 -1
  133. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js +1 -0
  134. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js.map +1 -1
  135. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +1 -0
  136. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
  137. package/esm/vs/editor/browser/widget/diffEditor/utils.js +2 -0
  138. package/esm/vs/editor/browser/widget/diffEditor/utils.js.map +1 -1
  139. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -0
  140. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js.map +1 -1
  141. package/esm/vs/editor/common/config/editorOptions.js +122 -68
  142. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  143. package/esm/vs/editor/common/config/fontInfo.js +32 -16
  144. package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
  145. package/esm/vs/editor/common/config/fontInfoFromSettings.js +16 -0
  146. package/esm/vs/editor/common/config/fontInfoFromSettings.js.map +1 -0
  147. package/esm/vs/editor/common/core/edits/edit.js +1 -0
  148. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  149. package/esm/vs/editor/common/core/edits/stringEdit.js +2 -0
  150. package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
  151. package/esm/vs/editor/common/core/position.js +1 -1
  152. package/esm/vs/editor/common/core/position.js.map +1 -1
  153. package/esm/vs/editor/common/core/range.js +1 -1
  154. package/esm/vs/editor/common/core/range.js.map +1 -1
  155. package/esm/vs/editor/common/core/selection.js +1 -1
  156. package/esm/vs/editor/common/core/selection.js.map +1 -1
  157. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  158. package/esm/vs/editor/common/editorCommon.js.map +1 -1
  159. package/esm/vs/editor/common/languages.js +1 -1
  160. package/esm/vs/editor/common/languages.js.map +1 -1
  161. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js +14 -0
  162. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js.map +1 -1
  163. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js +2 -0
  164. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js.map +1 -1
  165. package/esm/vs/editor/common/model/textModel.js +1 -1
  166. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  167. package/esm/vs/editor/common/model.js +1 -1
  168. package/esm/vs/editor/common/model.js.map +1 -1
  169. package/esm/vs/editor/common/services/editorBaseApi.js.map +1 -1
  170. package/esm/vs/editor/common/services/editorWebWorker.js +1 -0
  171. package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
  172. package/esm/vs/editor/common/services/editorWorkerHost.js.map +1 -1
  173. package/esm/vs/editor/common/services/modelService.js +14 -21
  174. package/esm/vs/editor/common/services/modelService.js.map +1 -1
  175. package/esm/vs/editor/common/textModelEditSource.js +2 -0
  176. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  177. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +40 -1
  178. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
  179. package/esm/vs/editor/common/viewModel/viewModelImpl.js +2 -1
  180. package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
  181. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +1 -1
  182. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js.map +1 -1
  183. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +1 -1
  184. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  185. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +1 -0
  186. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
  187. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +1 -0
  188. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
  189. package/esm/vs/editor/contrib/find/browser/findModel.js +1 -0
  190. package/esm/vs/editor/contrib/find/browser/findModel.js.map +1 -1
  191. package/esm/vs/editor/contrib/find/browser/findWidget.css +5 -5
  192. package/esm/vs/editor/contrib/folding/browser/folding.css +4 -4
  193. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js.map +1 -1
  194. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  195. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js.map +1 -1
  196. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +30 -14
  197. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
  198. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +5 -3
  199. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  200. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +56 -7
  201. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  202. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js +1 -0
  203. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js.map +1 -1
  204. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +2 -0
  205. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  206. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -0
  207. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  208. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js +2 -1
  209. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditWithChanges.js.map +1 -1
  210. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js +1 -1
  211. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsModel.js.map +1 -1
  212. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js +27 -1
  213. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsView.js.map +1 -1
  214. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js +1 -1
  215. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/inlineEditsViewProducer.js.map +1 -1
  216. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +1 -1
  217. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
  218. package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
  219. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.css +2 -0
  220. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +2 -0
  221. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  222. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js.map +1 -1
  223. package/esm/vs/editor/editor.api.d.ts +8 -8
  224. package/esm/vs/editor/editor.api.js +4 -0
  225. package/esm/vs/editor/editor.api.js.map +1 -1
  226. package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
  227. package/esm/vs/editor/standalone/browser/standaloneEditor.js +37 -0
  228. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  229. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +37 -0
  230. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  231. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  232. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  233. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js +3 -0
  234. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js.map +1 -1
  235. package/esm/vs/platform/accessibility/browser/accessibilityService.js +2 -2
  236. package/esm/vs/platform/accessibility/browser/accessibilityService.js.map +1 -1
  237. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  238. package/esm/vs/platform/commands/common/commands.js.map +1 -1
  239. package/esm/vs/platform/contextkey/common/contextkey.js +5 -0
  240. package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
  241. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js +1 -1
  242. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js.map +1 -1
  243. package/esm/vs/platform/dnd/browser/dnd.js +1 -1
  244. package/esm/vs/platform/dnd/browser/dnd.js.map +1 -1
  245. package/esm/vs/platform/instantiation/common/descriptors.js.map +1 -1
  246. package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
  247. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -0
  248. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  249. package/esm/vs/platform/list/browser/listService.js +5 -0
  250. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  251. package/esm/vs/platform/log/common/log.js.map +1 -1
  252. package/esm/vs/platform/log/common/logService.js.map +1 -1
  253. package/esm/vs/platform/observable/common/wrapInHotClass.js +2 -0
  254. package/esm/vs/platform/observable/common/wrapInHotClass.js.map +1 -1
  255. package/esm/vs/platform/observable/common/wrapInReloadableClass.js +3 -0
  256. package/esm/vs/platform/observable/common/wrapInReloadableClass.js.map +1 -1
  257. package/esm/vs/platform/product/common/product.js +68 -0
  258. package/esm/vs/platform/product/common/product.js.map +1 -0
  259. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js +26 -2
  260. package/esm/vs/platform/quickinput/browser/commandsQuickAccess.js.map +1 -1
  261. package/esm/vs/platform/quickinput/browser/quickInput.js +1 -1
  262. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  263. package/monaco.d.ts +8 -8
  264. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/worker/webWorker.ts","vs/base/common/worker/webWorker.ts"],"names":[],"mappings":"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","file":"webWorker.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from '../charCode.js';\nimport { onUnexpectedError, transformErrorForSerialization } from '../errors.js';\nimport { Emitter, Event } from '../event.js';\nimport { Disposable, IDisposable } from '../lifecycle.js';\nimport { isWeb } from '../platform.js';\nimport * as strings from '../strings.js';\n\nconst DEFAULT_CHANNEL = 'default';\nconst INITIALIZE = '$initialize';\n\nexport interface IWebWorker extends IDisposable {\n\tgetId(): number;\n\tonMessage: Event<Message>;\n\tonError: Event<any>;\n\tpostMessage(message: Message, transfer: ArrayBuffer[]): void;\n}\n\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err: any): void {\n\tif (!isWeb) {\n\t\t// running tests\n\t\treturn;\n\t}\n\tif (!webWorkerWarningLogged) {\n\t\twebWorkerWarningLogged = true;\n\t\tconsole.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n\t}\n\tconsole.warn(err.message);\n}\n\nconst enum MessageType {\n\tRequest,\n\tReply,\n\tSubscribeEvent,\n\tEvent,\n\tUnsubscribeEvent\n}\nclass RequestMessage {\n\tpublic readonly type = MessageType.Request;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly method: string,\n\t\tpublic readonly args: any[]\n\t) { }\n}\nclass ReplyMessage {\n\tpublic readonly type = MessageType.Reply;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly seq: string,\n\t\tpublic readonly res: any,\n\t\tpublic readonly err: any\n\t) { }\n}\nclass SubscribeEventMessage {\n\tpublic readonly type = MessageType.SubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly eventName: string,\n\t\tpublic readonly arg: any\n\t) { }\n}\nclass EventMessage {\n\tpublic readonly type = MessageType.Event;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly event: any\n\t) { }\n}\nclass UnsubscribeEventMessage {\n\tpublic readonly type = MessageType.UnsubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string\n\t) { }\n}\nexport type Message = RequestMessage | ReplyMessage | SubscribeEventMessage | EventMessage | UnsubscribeEventMessage;\n\ninterface IMessageReply {\n\tresolve: (value?: any) => void;\n\treject: (error?: any) => void;\n}\n\ninterface IMessageHandler {\n\tsendMessage(msg: any, transfer?: ArrayBuffer[]): void;\n\thandleMessage(channel: string, method: string, args: any[]): Promise<any>;\n\thandleEvent(channel: string, eventName: string, arg: any): Event<any>;\n}\n\nclass WebWorkerProtocol {\n\n\tprivate _workerId: number;\n\tprivate _lastSentReq: number;\n\tprivate _pendingReplies: { [req: string]: IMessageReply };\n\tprivate _pendingEmitters: Map<string, Emitter<any>>;\n\tprivate _pendingEvents: Map<string, IDisposable>;\n\tprivate _handler: IMessageHandler;\n\n\tconstructor(handler: IMessageHandler) {\n\t\tthis._workerId = -1;\n\t\tthis._handler = handler;\n\t\tthis._lastSentReq = 0;\n\t\tthis._pendingReplies = Object.create(null);\n\t\tthis._pendingEmitters = new Map<string, Emitter<any>>();\n\t\tthis._pendingEvents = new Map<string, IDisposable>();\n\t}\n\n\tpublic setWorkerId(workerId: number): void {\n\t\tthis._workerId = workerId;\n\t}\n\n\tpublic sendMessage(channel: string, method: string, args: any[]): Promise<any> {\n\t\tconst req = String(++this._lastSentReq);\n\t\treturn new Promise<any>((resolve, reject) => {\n\t\t\tthis._pendingReplies[req] = {\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject\n\t\t\t};\n\t\t\tthis._send(new RequestMessage(this._workerId, req, channel, method, args));\n\t\t});\n\t}\n\n\tpublic listen(channel: string, eventName: string, arg: any): Event<any> {\n\t\tlet req: string | null = null;\n\t\tconst emitter = new Emitter<any>({\n\t\t\tonWillAddFirstListener: () => {\n\t\t\t\treq = String(++this._lastSentReq);\n\t\t\t\tthis._pendingEmitters.set(req, emitter);\n\t\t\t\tthis._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n\t\t\t},\n\t\t\tonDidRemoveLastListener: () => {\n\t\t\t\tthis._pendingEmitters.delete(req!);\n\t\t\t\tthis._send(new UnsubscribeEventMessage(this._workerId, req!));\n\t\t\t\treq = null;\n\t\t\t}\n\t\t});\n\t\treturn emitter.event;\n\t}\n\n\tpublic handleMessage(message: Message): void {\n\t\tif (!message || !message.vsWorker) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._handleMessage(message);\n\t}\n\n\tpublic createProxyToRemoteChannel<T extends object>(channel: string, sendMessageBarrier?: () => Promise<void>): T {\n\t\tconst handler = {\n\t\t\tget: (target: any, name: PropertyKey) => {\n\t\t\t\tif (typeof name === 'string' && !target[name]) {\n\t\t\t\t\tif (propertyIsDynamicEvent(name)) { // onDynamic...\n\t\t\t\t\t\ttarget[name] = (arg: any): Event<any> => {\n\t\t\t\t\t\t\treturn this.listen(channel, name, arg);\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (propertyIsEvent(name)) { // on...\n\t\t\t\t\t\ttarget[name] = this.listen(channel, name, undefined);\n\t\t\t\t\t} else if (name.charCodeAt(0) === CharCode.DollarSign) { // $...\n\t\t\t\t\t\ttarget[name] = async (...myArgs: any[]) => {\n\t\t\t\t\t\t\tawait sendMessageBarrier?.();\n\t\t\t\t\t\t\treturn this.sendMessage(channel, name, myArgs);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target[name];\n\t\t\t}\n\t\t};\n\t\treturn new Proxy(Object.create(null), handler);\n\t}\n\n\tprivate _handleMessage(msg: Message): void {\n\t\tswitch (msg.type) {\n\t\t\tcase MessageType.Reply:\n\t\t\t\treturn this._handleReplyMessage(msg);\n\t\t\tcase MessageType.Request:\n\t\t\t\treturn this._handleRequestMessage(msg);\n\t\t\tcase MessageType.SubscribeEvent:\n\t\t\t\treturn this._handleSubscribeEventMessage(msg);\n\t\t\tcase MessageType.Event:\n\t\t\t\treturn this._handleEventMessage(msg);\n\t\t\tcase MessageType.UnsubscribeEvent:\n\t\t\t\treturn this._handleUnsubscribeEventMessage(msg);\n\t\t}\n\t}\n\n\tprivate _handleReplyMessage(replyMessage: ReplyMessage): void {\n\t\tif (!this._pendingReplies[replyMessage.seq]) {\n\t\t\tconsole.warn('Got reply to unknown seq');\n\t\t\treturn;\n\t\t}\n\n\t\tconst reply = this._pendingReplies[replyMessage.seq];\n\t\tdelete this._pendingReplies[replyMessage.seq];\n\n\t\tif (replyMessage.err) {\n\t\t\tlet err = replyMessage.err;\n\t\t\tif (replyMessage.err.$isError) {\n\t\t\t\terr = new Error();\n\t\t\t\terr.name = replyMessage.err.name;\n\t\t\t\terr.message = replyMessage.err.message;\n\t\t\t\terr.stack = replyMessage.err.stack;\n\t\t\t}\n\t\t\treply.reject(err);\n\t\t\treturn;\n\t\t}\n\n\t\treply.resolve(replyMessage.res);\n\t}\n\n\tprivate _handleRequestMessage(requestMessage: RequestMessage): void {\n\t\tconst req = requestMessage.req;\n\t\tconst result = this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args);\n\t\tresult.then((r) => {\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, r, undefined));\n\t\t}, (e) => {\n\t\t\tif (e.detail instanceof Error) {\n\t\t\t\t// Loading errors have a detail property that points to the actual error\n\t\t\t\te.detail = transformErrorForSerialization(e.detail);\n\t\t\t}\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n\t\t});\n\t}\n\n\tprivate _handleSubscribeEventMessage(msg: SubscribeEventMessage): void {\n\t\tconst req = msg.req;\n\t\tconst disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n\t\t\tthis._send(new EventMessage(this._workerId, req, event));\n\t\t});\n\t\tthis._pendingEvents.set(req, disposable);\n\t}\n\n\tprivate _handleEventMessage(msg: EventMessage): void {\n\t\tif (!this._pendingEmitters.has(msg.req)) {\n\t\t\tconsole.warn('Got event for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEmitters.get(msg.req)!.fire(msg.event);\n\t}\n\n\tprivate _handleUnsubscribeEventMessage(msg: UnsubscribeEventMessage): void {\n\t\tif (!this._pendingEvents.has(msg.req)) {\n\t\t\tconsole.warn('Got unsubscribe for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEvents.get(msg.req)!.dispose();\n\t\tthis._pendingEvents.delete(msg.req);\n\t}\n\n\tprivate _send(msg: Message): void {\n\t\tconst transfer: ArrayBuffer[] = [];\n\t\tif (msg.type === MessageType.Request) {\n\t\t\tfor (let i = 0; i < msg.args.length; i++) {\n\t\t\t\tif (msg.args[i] instanceof ArrayBuffer) {\n\t\t\t\t\ttransfer.push(msg.args[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.type === MessageType.Reply) {\n\t\t\tif (msg.res instanceof ArrayBuffer) {\n\t\t\t\ttransfer.push(msg.res);\n\t\t\t}\n\t\t}\n\t\tthis._handler.sendMessage(msg, transfer);\n\t}\n}\n\ntype ProxiedMethodName = (`$${string}` | `on${string}`);\n\nexport type Proxied<T> = { [K in keyof T]: T[K] extends (...args: infer A) => infer R\n\t? (\n\t\tK extends ProxiedMethodName\n\t\t? (...args: A) => Promise<Awaited<R>>\n\t\t: never\n\t)\n\t: never\n};\n\nexport interface IWebWorkerClient<TProxy> {\n\tproxy: Proxied<TProxy>;\n\tdispose(): void;\n\tsetChannel<T extends object>(channel: string, handler: T): void;\n}\n\nexport interface IWebWorkerServer {\n\tgetChannel<T extends object>(channel: string): Proxied<T>;\n}\n\n/**\n * Main thread side\n */\nexport class WebWorkerClient<W extends object> extends Disposable implements IWebWorkerClient<W> {\n\n\tprivate readonly _worker: IWebWorker;\n\tprivate readonly _onModuleLoaded: Promise<void>;\n\tprivate readonly _protocol: WebWorkerProtocol;\n\tpublic readonly proxy: Proxied<W>;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\n\tconstructor(\n\t\tworker: IWebWorker\n\t) {\n\t\tsuper();\n\n\t\tthis._worker = this._register(worker);\n\t\tthis._register(this._worker.onMessage((msg) => {\n\t\t\tthis._protocol.handleMessage(msg);\n\t\t}));\n\t\tthis._register(this._worker.onError((err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tonUnexpectedError(err);\n\t\t}));\n\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: any, transfer: ArrayBuffer[]): void => {\n\t\t\t\tthis._worker.postMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: any[]): Promise<any> => {\n\t\t\t\treturn this._handleMessage(channel, method, args);\n\t\t\t},\n\t\t\thandleEvent: (channel: string, eventName: string, arg: any): Event<any> => {\n\t\t\t\treturn this._handleEvent(channel, eventName, arg);\n\t\t\t}\n\t\t});\n\t\tthis._protocol.setWorkerId(this._worker.getId());\n\n\t\t// Send initialize message\n\t\tthis._onModuleLoaded = this._protocol.sendMessage(DEFAULT_CHANNEL, INITIALIZE, [\n\t\t\tthis._worker.getId(),\n\t\t]);\n\n\t\tthis.proxy = this._protocol.createProxyToRemoteChannel(DEFAULT_CHANNEL, async () => { await this._onModuleLoaded; });\n\t\tthis._onModuleLoaded.catch((e) => {\n\t\t\tthis._onError('Worker failed to load ', e);\n\t\t});\n\t}\n\n\tprivate _handleMessage(channelName: string, method: string, args: any[]): Promise<any> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channelName} on main thread`));\n\t\t}\n\t\tif (typeof (channel as any)[method] !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on main thread channel ${channelName}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve((channel as any)[method].apply(channel, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channelName: string, eventName: string, arg: any): Event<any> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\tthrow new Error(`Missing channel ${channelName} on main thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst event = (channel as any)[eventName].call(channel, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (channel as any)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic setChannel<T extends object>(channel: string, handler: T): void {\n\t\tthis._localChannels.set(channel, handler);\n\t}\n\n\tprivate _onError(message: string, error?: any): void {\n\t\tconsole.error(message);\n\t\tconsole.info(error);\n\t}\n}\n\nfunction propertyIsEvent(name: string): boolean {\n\t// Assume a property is an event if it has a form of \"onSomething\"\n\treturn name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\n\nfunction propertyIsDynamicEvent(name: string): boolean {\n\t// Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n\treturn /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\n\nexport interface IWebWorkerServerRequestHandler {\n\t_requestHandlerBrand: any;\n\t[prop: string]: any;\n}\n\nexport interface IWebWorkerServerRequestHandlerFactory<T extends IWebWorkerServerRequestHandler> {\n\t(workerServer: IWebWorkerServer): T;\n}\n\n/**\n * Worker side\n */\nexport class WebWorkerServer<T extends IWebWorkerServerRequestHandler> implements IWebWorkerServer {\n\n\tpublic readonly requestHandler: T;\n\tprivate _protocol: WebWorkerProtocol;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\tprivate readonly _remoteChannels: Map<string, object> = new Map();\n\n\tconstructor(postMessage: (msg: Message, transfer?: ArrayBuffer[]) => void, requestHandlerFactory: IWebWorkerServerRequestHandlerFactory<T>) {\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: any, transfer: ArrayBuffer[]): void => {\n\t\t\t\tpostMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: any[]): Promise<any> => this._handleMessage(channel, method, args),\n\t\t\thandleEvent: (channel: string, eventName: string, arg: any): Event<any> => this._handleEvent(channel, eventName, arg)\n\t\t});\n\t\tthis.requestHandler = requestHandlerFactory(this);\n\t}\n\n\tpublic onmessage(msg: any): void {\n\t\tthis._protocol.handleMessage(msg);\n\t}\n\n\tprivate _handleMessage(channel: string, method: string, args: any[]): Promise<any> {\n\t\tif (channel === DEFAULT_CHANNEL && method === INITIALIZE) {\n\t\t\treturn this.initialize(<number>args[0]);\n\t\t}\n\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channel} on worker thread`));\n\t\t}\n\t\tif (typeof (requestHandler as any)[method] !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on worker thread channel ${channel}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve((requestHandler as any)[method].apply(requestHandler, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channel: string, eventName: string, arg: any): Event<any> {\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\tthrow new Error(`Missing channel ${channel} on worker thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst event = (requestHandler as any)[eventName].call(requestHandler, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (requestHandler as any)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic getChannel<T extends object>(channel: string): Proxied<T> {\n\t\tif (!this._remoteChannels.has(channel)) {\n\t\t\tconst inst = this._protocol.createProxyToRemoteChannel(channel);\n\t\t\tthis._remoteChannels.set(channel, inst);\n\t\t}\n\t\treturn this._remoteChannels.get(channel) as Proxied<T>;\n\t}\n\n\tprivate async initialize(workerId: number): Promise<void> {\n\t\tthis._protocol.setWorkerId(workerId);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from '../charCode.js';\nimport { onUnexpectedError, transformErrorForSerialization } from '../errors.js';\nimport { Emitter, Event } from '../event.js';\nimport { Disposable, IDisposable } from '../lifecycle.js';\nimport { isWeb } from '../platform.js';\nimport * as strings from '../strings.js';\n\nconst DEFAULT_CHANNEL = 'default';\nconst INITIALIZE = '$initialize';\n\nexport interface IWebWorker extends IDisposable {\n\tgetId(): number;\n\tonMessage: Event<Message>;\n\tonError: Event<any>;\n\tpostMessage(message: Message, transfer: ArrayBuffer[]): void;\n}\n\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err: any): void {\n\tif (!isWeb) {\n\t\t// running tests\n\t\treturn;\n\t}\n\tif (!webWorkerWarningLogged) {\n\t\twebWorkerWarningLogged = true;\n\t\tconsole.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n\t}\n\tconsole.warn(err.message);\n}\n\nconst enum MessageType {\n\tRequest,\n\tReply,\n\tSubscribeEvent,\n\tEvent,\n\tUnsubscribeEvent\n}\nclass RequestMessage {\n\tpublic readonly type = MessageType.Request;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly method: string,\n\t\tpublic readonly args: any[]\n\t) { }\n}\nclass ReplyMessage {\n\tpublic readonly type = MessageType.Reply;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly seq: string,\n\t\tpublic readonly res: any,\n\t\tpublic readonly err: any\n\t) { }\n}\nclass SubscribeEventMessage {\n\tpublic readonly type = MessageType.SubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly eventName: string,\n\t\tpublic readonly arg: any\n\t) { }\n}\nclass EventMessage {\n\tpublic readonly type = MessageType.Event;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly event: any\n\t) { }\n}\nclass UnsubscribeEventMessage {\n\tpublic readonly type = MessageType.UnsubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string\n\t) { }\n}\nexport type Message = RequestMessage | ReplyMessage | SubscribeEventMessage | EventMessage | UnsubscribeEventMessage;\n\ninterface IMessageReply {\n\tresolve: (value?: any) => void;\n\treject: (error?: any) => void;\n}\n\ninterface IMessageHandler {\n\tsendMessage(msg: any, transfer?: ArrayBuffer[]): void;\n\thandleMessage(channel: string, method: string, args: any[]): Promise<any>;\n\thandleEvent(channel: string, eventName: string, arg: any): Event<any>;\n}\n\nclass WebWorkerProtocol {\n\n\tprivate _workerId: number;\n\tprivate _lastSentReq: number;\n\tprivate _pendingReplies: { [req: string]: IMessageReply };\n\tprivate _pendingEmitters: Map<string, Emitter<any>>;\n\tprivate _pendingEvents: Map<string, IDisposable>;\n\tprivate _handler: IMessageHandler;\n\n\tconstructor(handler: IMessageHandler) {\n\t\tthis._workerId = -1;\n\t\tthis._handler = handler;\n\t\tthis._lastSentReq = 0;\n\t\tthis._pendingReplies = Object.create(null);\n\t\tthis._pendingEmitters = new Map<string, Emitter<any>>();\n\t\tthis._pendingEvents = new Map<string, IDisposable>();\n\t}\n\n\tpublic setWorkerId(workerId: number): void {\n\t\tthis._workerId = workerId;\n\t}\n\n\tpublic sendMessage(channel: string, method: string, args: any[]): Promise<any> {\n\t\tconst req = String(++this._lastSentReq);\n\t\treturn new Promise<any>((resolve, reject) => {\n\t\t\tthis._pendingReplies[req] = {\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject\n\t\t\t};\n\t\t\tthis._send(new RequestMessage(this._workerId, req, channel, method, args));\n\t\t});\n\t}\n\n\tpublic listen(channel: string, eventName: string, arg: any): Event<any> {\n\t\tlet req: string | null = null;\n\t\tconst emitter = new Emitter<any>({\n\t\t\tonWillAddFirstListener: () => {\n\t\t\t\treq = String(++this._lastSentReq);\n\t\t\t\tthis._pendingEmitters.set(req, emitter);\n\t\t\t\tthis._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n\t\t\t},\n\t\t\tonDidRemoveLastListener: () => {\n\t\t\t\tthis._pendingEmitters.delete(req!);\n\t\t\t\tthis._send(new UnsubscribeEventMessage(this._workerId, req!));\n\t\t\t\treq = null;\n\t\t\t}\n\t\t});\n\t\treturn emitter.event;\n\t}\n\n\tpublic handleMessage(message: Message): void {\n\t\tif (!message || !message.vsWorker) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._workerId !== -1 && message.vsWorker !== this._workerId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._handleMessage(message);\n\t}\n\n\tpublic createProxyToRemoteChannel<T extends object>(channel: string, sendMessageBarrier?: () => Promise<void>): T {\n\t\tconst handler = {\n\t\t\tget: (target: any, name: PropertyKey) => {\n\t\t\t\tif (typeof name === 'string' && !target[name]) {\n\t\t\t\t\tif (propertyIsDynamicEvent(name)) { // onDynamic...\n\t\t\t\t\t\ttarget[name] = (arg: any): Event<any> => {\n\t\t\t\t\t\t\treturn this.listen(channel, name, arg);\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (propertyIsEvent(name)) { // on...\n\t\t\t\t\t\ttarget[name] = this.listen(channel, name, undefined);\n\t\t\t\t\t} else if (name.charCodeAt(0) === CharCode.DollarSign) { // $...\n\t\t\t\t\t\ttarget[name] = async (...myArgs: any[]) => {\n\t\t\t\t\t\t\tawait sendMessageBarrier?.();\n\t\t\t\t\t\t\treturn this.sendMessage(channel, name, myArgs);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target[name];\n\t\t\t}\n\t\t};\n\t\treturn new Proxy(Object.create(null), handler);\n\t}\n\n\tprivate _handleMessage(msg: Message): void {\n\t\tswitch (msg.type) {\n\t\t\tcase MessageType.Reply:\n\t\t\t\treturn this._handleReplyMessage(msg);\n\t\t\tcase MessageType.Request:\n\t\t\t\treturn this._handleRequestMessage(msg);\n\t\t\tcase MessageType.SubscribeEvent:\n\t\t\t\treturn this._handleSubscribeEventMessage(msg);\n\t\t\tcase MessageType.Event:\n\t\t\t\treturn this._handleEventMessage(msg);\n\t\t\tcase MessageType.UnsubscribeEvent:\n\t\t\t\treturn this._handleUnsubscribeEventMessage(msg);\n\t\t}\n\t}\n\n\tprivate _handleReplyMessage(replyMessage: ReplyMessage): void {\n\t\tif (!this._pendingReplies[replyMessage.seq]) {\n\t\t\tconsole.warn('Got reply to unknown seq');\n\t\t\treturn;\n\t\t}\n\n\t\tconst reply = this._pendingReplies[replyMessage.seq];\n\t\tdelete this._pendingReplies[replyMessage.seq];\n\n\t\tif (replyMessage.err) {\n\t\t\tlet err = replyMessage.err;\n\t\t\tif (replyMessage.err.$isError) {\n\t\t\t\terr = new Error();\n\t\t\t\terr.name = replyMessage.err.name;\n\t\t\t\terr.message = replyMessage.err.message;\n\t\t\t\terr.stack = replyMessage.err.stack;\n\t\t\t}\n\t\t\treply.reject(err);\n\t\t\treturn;\n\t\t}\n\n\t\treply.resolve(replyMessage.res);\n\t}\n\n\tprivate _handleRequestMessage(requestMessage: RequestMessage): void {\n\t\tconst req = requestMessage.req;\n\t\tconst result = this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args);\n\t\tresult.then((r) => {\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, r, undefined));\n\t\t}, (e) => {\n\t\t\tif (e.detail instanceof Error) {\n\t\t\t\t// Loading errors have a detail property that points to the actual error\n\t\t\t\te.detail = transformErrorForSerialization(e.detail);\n\t\t\t}\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n\t\t});\n\t}\n\n\tprivate _handleSubscribeEventMessage(msg: SubscribeEventMessage): void {\n\t\tconst req = msg.req;\n\t\tconst disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n\t\t\tthis._send(new EventMessage(this._workerId, req, event));\n\t\t});\n\t\tthis._pendingEvents.set(req, disposable);\n\t}\n\n\tprivate _handleEventMessage(msg: EventMessage): void {\n\t\tif (!this._pendingEmitters.has(msg.req)) {\n\t\t\tconsole.warn('Got event for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEmitters.get(msg.req)!.fire(msg.event);\n\t}\n\n\tprivate _handleUnsubscribeEventMessage(msg: UnsubscribeEventMessage): void {\n\t\tif (!this._pendingEvents.has(msg.req)) {\n\t\t\tconsole.warn('Got unsubscribe for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEvents.get(msg.req)!.dispose();\n\t\tthis._pendingEvents.delete(msg.req);\n\t}\n\n\tprivate _send(msg: Message): void {\n\t\tconst transfer: ArrayBuffer[] = [];\n\t\tif (msg.type === MessageType.Request) {\n\t\t\tfor (let i = 0; i < msg.args.length; i++) {\n\t\t\t\tif (msg.args[i] instanceof ArrayBuffer) {\n\t\t\t\t\ttransfer.push(msg.args[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.type === MessageType.Reply) {\n\t\t\tif (msg.res instanceof ArrayBuffer) {\n\t\t\t\ttransfer.push(msg.res);\n\t\t\t}\n\t\t}\n\t\tthis._handler.sendMessage(msg, transfer);\n\t}\n}\n\ntype ProxiedMethodName = (`$${string}` | `on${string}`);\n\nexport type Proxied<T> = { [K in keyof T]: T[K] extends (...args: infer A) => infer R\n\t? (\n\t\tK extends ProxiedMethodName\n\t\t? (...args: A) => Promise<Awaited<R>>\n\t\t: never\n\t)\n\t: never\n};\n\nexport interface IWebWorkerClient<TProxy> {\n\tproxy: Proxied<TProxy>;\n\tdispose(): void;\n\tsetChannel<T extends object>(channel: string, handler: T): void;\n}\n\nexport interface IWebWorkerServer {\n\tgetChannel<T extends object>(channel: string): Proxied<T>;\n}\n\n/**\n * Main thread side\n */\nexport class WebWorkerClient<W extends object> extends Disposable implements IWebWorkerClient<W> {\n\n\tprivate readonly _worker: IWebWorker;\n\tprivate readonly _onModuleLoaded: Promise<void>;\n\tprivate readonly _protocol: WebWorkerProtocol;\n\tpublic readonly proxy: Proxied<W>;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\n\tconstructor(\n\t\tworker: IWebWorker\n\t) {\n\t\tsuper();\n\n\t\tthis._worker = this._register(worker);\n\t\tthis._register(this._worker.onMessage((msg) => {\n\t\t\tthis._protocol.handleMessage(msg);\n\t\t}));\n\t\tthis._register(this._worker.onError((err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tonUnexpectedError(err);\n\t\t}));\n\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: any, transfer: ArrayBuffer[]): void => {\n\t\t\t\tthis._worker.postMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: any[]): Promise<any> => {\n\t\t\t\treturn this._handleMessage(channel, method, args);\n\t\t\t},\n\t\t\thandleEvent: (channel: string, eventName: string, arg: any): Event<any> => {\n\t\t\t\treturn this._handleEvent(channel, eventName, arg);\n\t\t\t}\n\t\t});\n\t\tthis._protocol.setWorkerId(this._worker.getId());\n\n\t\t// Send initialize message\n\t\tthis._onModuleLoaded = this._protocol.sendMessage(DEFAULT_CHANNEL, INITIALIZE, [\n\t\t\tthis._worker.getId(),\n\t\t]);\n\n\t\tthis.proxy = this._protocol.createProxyToRemoteChannel(DEFAULT_CHANNEL, async () => { await this._onModuleLoaded; });\n\t\tthis._onModuleLoaded.catch((e) => {\n\t\t\tthis._onError('Worker failed to load ', e);\n\t\t});\n\t}\n\n\tprivate _handleMessage(channelName: string, method: string, args: any[]): Promise<any> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channelName} on main thread`));\n\t\t}\n\t\tif (typeof (channel as any)[method] !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on main thread channel ${channelName}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve((channel as any)[method].apply(channel, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channelName: string, eventName: string, arg: any): Event<any> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\tthrow new Error(`Missing channel ${channelName} on main thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst event = (channel as any)[eventName].call(channel, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (channel as any)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic setChannel<T extends object>(channel: string, handler: T): void {\n\t\tthis._localChannels.set(channel, handler);\n\t}\n\n\tprivate _onError(message: string, error?: any): void {\n\t\tconsole.error(message);\n\t\tconsole.info(error);\n\t}\n}\n\nfunction propertyIsEvent(name: string): boolean {\n\t// Assume a property is an event if it has a form of \"onSomething\"\n\treturn name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\n\nfunction propertyIsDynamicEvent(name: string): boolean {\n\t// Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n\treturn /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\n\nexport interface IWebWorkerServerRequestHandler {\n\t_requestHandlerBrand: any;\n\t[prop: string]: any;\n}\n\nexport interface IWebWorkerServerRequestHandlerFactory<T extends IWebWorkerServerRequestHandler> {\n\t(workerServer: IWebWorkerServer): T;\n}\n\n/**\n * Worker side\n */\nexport class WebWorkerServer<T extends IWebWorkerServerRequestHandler> implements IWebWorkerServer {\n\n\tpublic readonly requestHandler: T;\n\tprivate _protocol: WebWorkerProtocol;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\tprivate readonly _remoteChannels: Map<string, object> = new Map();\n\n\tconstructor(postMessage: (msg: Message, transfer?: ArrayBuffer[]) => void, requestHandlerFactory: IWebWorkerServerRequestHandlerFactory<T>) {\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: any, transfer: ArrayBuffer[]): void => {\n\t\t\t\tpostMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: any[]): Promise<any> => this._handleMessage(channel, method, args),\n\t\t\thandleEvent: (channel: string, eventName: string, arg: any): Event<any> => this._handleEvent(channel, eventName, arg)\n\t\t});\n\t\tthis.requestHandler = requestHandlerFactory(this);\n\t}\n\n\tpublic onmessage(msg: any): void {\n\t\tthis._protocol.handleMessage(msg);\n\t}\n\n\tprivate _handleMessage(channel: string, method: string, args: any[]): Promise<any> {\n\t\tif (channel === DEFAULT_CHANNEL && method === INITIALIZE) {\n\t\t\treturn this.initialize(<number>args[0]);\n\t\t}\n\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channel} on worker thread`));\n\t\t}\n\t\tif (typeof (requestHandler as any)[method] !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on worker thread channel ${channel}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve((requestHandler as any)[method].apply(requestHandler, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channel: string, eventName: string, arg: any): Event<any> {\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\tthrow new Error(`Missing channel ${channel} on worker thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst event = (requestHandler as any)[eventName].call(requestHandler, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (requestHandler as any)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic getChannel<T extends object>(channel: string): Proxied<T> {\n\t\tif (!this._remoteChannels.has(channel)) {\n\t\t\tconst inst = this._protocol.createProxyToRemoteChannel(channel);\n\t\t\tthis._remoteChannels.set(channel, inst);\n\t\t}\n\t\treturn this._remoteChannels.get(channel) as Proxied<T>;\n\t}\n\n\tprivate async initialize(workerId: number): Promise<void> {\n\t\tthis._protocol.setWorkerId(workerId);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/worker/webWorker.ts","vs/base/common/worker/webWorker.ts"],"names":[],"mappings":"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","file":"webWorker.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from '../charCode.js';\nimport { onUnexpectedError, SerializedError, transformErrorForSerialization } from '../errors.js';\nimport { Emitter, Event } from '../event.js';\nimport { Disposable, IDisposable } from '../lifecycle.js';\nimport { isWeb } from '../platform.js';\nimport * as strings from '../strings.js';\n\nconst DEFAULT_CHANNEL = 'default';\nconst INITIALIZE = '$initialize';\n\nexport interface IWebWorker extends IDisposable {\n\tgetId(): number;\n\tonMessage: Event<Message>;\n\tonError: Event<unknown>;\n\tpostMessage(message: Message, transfer: ArrayBuffer[]): void;\n}\n\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err: unknown): void {\n\tif (!isWeb) {\n\t\t// running tests\n\t\treturn;\n\t}\n\tif (!webWorkerWarningLogged) {\n\t\twebWorkerWarningLogged = true;\n\t\tconsole.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n\t}\n\tconsole.warn((err as Error).message);\n}\n\nconst enum MessageType {\n\tRequest,\n\tReply,\n\tSubscribeEvent,\n\tEvent,\n\tUnsubscribeEvent\n}\nclass RequestMessage {\n\tpublic readonly type = MessageType.Request;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly method: string,\n\t\tpublic readonly args: unknown[]\n\t) { }\n}\nclass ReplyMessage {\n\tpublic readonly type = MessageType.Reply;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly seq: string,\n\t\tpublic readonly res: unknown,\n\t\tpublic readonly err: unknown | SerializedError\n\t) { }\n}\nclass SubscribeEventMessage {\n\tpublic readonly type = MessageType.SubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly eventName: string,\n\t\tpublic readonly arg: unknown\n\t) { }\n}\nclass EventMessage {\n\tpublic readonly type = MessageType.Event;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly event: unknown\n\t) { }\n}\nclass UnsubscribeEventMessage {\n\tpublic readonly type = MessageType.UnsubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string\n\t) { }\n}\nexport type Message = RequestMessage | ReplyMessage | SubscribeEventMessage | EventMessage | UnsubscribeEventMessage;\n\ninterface IMessageReply {\n\tresolve: (value?: unknown) => void;\n\treject: (error?: unknown) => void;\n}\n\ninterface IMessageHandler {\n\tsendMessage(msg: unknown, transfer?: ArrayBuffer[]): void;\n\thandleMessage(channel: string, method: string, args: unknown[]): Promise<unknown>;\n\thandleEvent(channel: string, eventName: string, arg: unknown): Event<unknown>;\n}\n\nclass WebWorkerProtocol {\n\n\tprivate _workerId: number;\n\tprivate _lastSentReq: number;\n\tprivate _pendingReplies: { [req: string]: IMessageReply };\n\tprivate _pendingEmitters: Map<string, Emitter<unknown>>;\n\tprivate _pendingEvents: Map<string, IDisposable>;\n\tprivate _handler: IMessageHandler;\n\n\tconstructor(handler: IMessageHandler) {\n\t\tthis._workerId = -1;\n\t\tthis._handler = handler;\n\t\tthis._lastSentReq = 0;\n\t\tthis._pendingReplies = Object.create(null);\n\t\tthis._pendingEmitters = new Map<string, Emitter<unknown>>();\n\t\tthis._pendingEvents = new Map<string, IDisposable>();\n\t}\n\n\tpublic setWorkerId(workerId: number): void {\n\t\tthis._workerId = workerId;\n\t}\n\n\tpublic async sendMessage(channel: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tconst req = String(++this._lastSentReq);\n\t\treturn new Promise<unknown>((resolve, reject) => {\n\t\t\tthis._pendingReplies[req] = {\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject\n\t\t\t};\n\t\t\tthis._send(new RequestMessage(this._workerId, req, channel, method, args));\n\t\t});\n\t}\n\n\tpublic listen(channel: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tlet req: string | null = null;\n\t\tconst emitter = new Emitter<unknown>({\n\t\t\tonWillAddFirstListener: () => {\n\t\t\t\treq = String(++this._lastSentReq);\n\t\t\t\tthis._pendingEmitters.set(req, emitter);\n\t\t\t\tthis._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n\t\t\t},\n\t\t\tonDidRemoveLastListener: () => {\n\t\t\t\tthis._pendingEmitters.delete(req!);\n\t\t\t\tthis._send(new UnsubscribeEventMessage(this._workerId, req!));\n\t\t\t\treq = null;\n\t\t\t}\n\t\t});\n\t\treturn emitter.event;\n\t}\n\n\tpublic handleMessage(message: unknown): void {\n\t\tif (!message || !(message as Message).vsWorker) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._workerId !== -1 && (message as Message).vsWorker !== this._workerId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._handleMessage(message as Message);\n\t}\n\n\tpublic createProxyToRemoteChannel<T extends object>(channel: string, sendMessageBarrier?: () => Promise<void>): T {\n\t\tconst handler = {\n\t\t\tget: (target: Record<PropertyKey, unknown>, name: PropertyKey) => {\n\t\t\t\tif (typeof name === 'string' && !target[name]) {\n\t\t\t\t\tif (propertyIsDynamicEvent(name)) { // onDynamic...\n\t\t\t\t\t\ttarget[name] = (arg: unknown): Event<unknown> => {\n\t\t\t\t\t\t\treturn this.listen(channel, name, arg);\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (propertyIsEvent(name)) { // on...\n\t\t\t\t\t\ttarget[name] = this.listen(channel, name, undefined);\n\t\t\t\t\t} else if (name.charCodeAt(0) === CharCode.DollarSign) { // $...\n\t\t\t\t\t\ttarget[name] = async (...myArgs: unknown[]) => {\n\t\t\t\t\t\t\tawait sendMessageBarrier?.();\n\t\t\t\t\t\t\treturn this.sendMessage(channel, name, myArgs);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target[name];\n\t\t\t}\n\t\t};\n\t\treturn new Proxy(Object.create(null), handler);\n\t}\n\n\tprivate _handleMessage(msg: Message): void {\n\t\tswitch (msg.type) {\n\t\t\tcase MessageType.Reply:\n\t\t\t\treturn this._handleReplyMessage(msg);\n\t\t\tcase MessageType.Request:\n\t\t\t\treturn this._handleRequestMessage(msg);\n\t\t\tcase MessageType.SubscribeEvent:\n\t\t\t\treturn this._handleSubscribeEventMessage(msg);\n\t\t\tcase MessageType.Event:\n\t\t\t\treturn this._handleEventMessage(msg);\n\t\t\tcase MessageType.UnsubscribeEvent:\n\t\t\t\treturn this._handleUnsubscribeEventMessage(msg);\n\t\t}\n\t}\n\n\tprivate _handleReplyMessage(replyMessage: ReplyMessage): void {\n\t\tif (!this._pendingReplies[replyMessage.seq]) {\n\t\t\tconsole.warn('Got reply to unknown seq');\n\t\t\treturn;\n\t\t}\n\n\t\tconst reply = this._pendingReplies[replyMessage.seq];\n\t\tdelete this._pendingReplies[replyMessage.seq];\n\n\t\tif (replyMessage.err) {\n\t\t\tlet err = replyMessage.err;\n\t\t\tif ((replyMessage.err as SerializedError).$isError) {\n\t\t\t\tconst newErr = new Error();\n\t\t\t\tnewErr.name = (replyMessage.err as SerializedError).name;\n\t\t\t\tnewErr.message = (replyMessage.err as SerializedError).message;\n\t\t\t\tnewErr.stack = (replyMessage.err as SerializedError).stack;\n\t\t\t\terr = newErr;\n\t\t\t}\n\t\t\treply.reject(err);\n\t\t\treturn;\n\t\t}\n\n\t\treply.resolve(replyMessage.res);\n\t}\n\n\tprivate _handleRequestMessage(requestMessage: RequestMessage): void {\n\t\tconst req = requestMessage.req;\n\t\tconst result = this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args);\n\t\tresult.then((r) => {\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, r, undefined));\n\t\t}, (e) => {\n\t\t\tif (e.detail instanceof Error) {\n\t\t\t\t// Loading errors have a detail property that points to the actual error\n\t\t\t\te.detail = transformErrorForSerialization(e.detail);\n\t\t\t}\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n\t\t});\n\t}\n\n\tprivate _handleSubscribeEventMessage(msg: SubscribeEventMessage): void {\n\t\tconst req = msg.req;\n\t\tconst disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n\t\t\tthis._send(new EventMessage(this._workerId, req, event));\n\t\t});\n\t\tthis._pendingEvents.set(req, disposable);\n\t}\n\n\tprivate _handleEventMessage(msg: EventMessage): void {\n\t\tif (!this._pendingEmitters.has(msg.req)) {\n\t\t\tconsole.warn('Got event for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEmitters.get(msg.req)!.fire(msg.event);\n\t}\n\n\tprivate _handleUnsubscribeEventMessage(msg: UnsubscribeEventMessage): void {\n\t\tif (!this._pendingEvents.has(msg.req)) {\n\t\t\tconsole.warn('Got unsubscribe for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEvents.get(msg.req)!.dispose();\n\t\tthis._pendingEvents.delete(msg.req);\n\t}\n\n\tprivate _send(msg: Message): void {\n\t\tconst transfer: ArrayBuffer[] = [];\n\t\tif (msg.type === MessageType.Request) {\n\t\t\tfor (let i = 0; i < msg.args.length; i++) {\n\t\t\t\tconst arg = msg.args[i];\n\t\t\t\tif (arg instanceof ArrayBuffer) {\n\t\t\t\t\ttransfer.push(arg);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.type === MessageType.Reply) {\n\t\t\tif (msg.res instanceof ArrayBuffer) {\n\t\t\t\ttransfer.push(msg.res);\n\t\t\t}\n\t\t}\n\t\tthis._handler.sendMessage(msg, transfer);\n\t}\n}\n\ntype ProxiedMethodName = (`$${string}` | `on${string}`);\n\nexport type Proxied<T> = { [K in keyof T]: T[K] extends (...args: infer A) => infer R\n\t? (\n\t\tK extends ProxiedMethodName\n\t\t? (...args: A) => Promise<Awaited<R>>\n\t\t: never\n\t)\n\t: never\n};\n\nexport interface IWebWorkerClient<TProxy> {\n\tproxy: Proxied<TProxy>;\n\tdispose(): void;\n\tsetChannel<T extends object>(channel: string, handler: T): void;\n}\n\nexport interface IWebWorkerServer {\n\tgetChannel<T extends object>(channel: string): Proxied<T>;\n}\n\n/**\n * Main thread side\n */\nexport class WebWorkerClient<W extends object> extends Disposable implements IWebWorkerClient<W> {\n\n\tprivate readonly _worker: IWebWorker;\n\tprivate readonly _onModuleLoaded: Promise<void>;\n\tprivate readonly _protocol: WebWorkerProtocol;\n\tpublic readonly proxy: Proxied<W>;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\n\tconstructor(\n\t\tworker: IWebWorker\n\t) {\n\t\tsuper();\n\n\t\tthis._worker = this._register(worker);\n\t\tthis._register(this._worker.onMessage((msg) => {\n\t\t\tthis._protocol.handleMessage(msg);\n\t\t}));\n\t\tthis._register(this._worker.onError((err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tonUnexpectedError(err);\n\t\t}));\n\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: Message, transfer: ArrayBuffer[]): void => {\n\t\t\t\tthis._worker.postMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: unknown[]): Promise<unknown> => {\n\t\t\t\treturn this._handleMessage(channel, method, args);\n\t\t\t},\n\t\t\thandleEvent: (channel: string, eventName: string, arg: unknown): Event<unknown> => {\n\t\t\t\treturn this._handleEvent(channel, eventName, arg);\n\t\t\t}\n\t\t});\n\t\tthis._protocol.setWorkerId(this._worker.getId());\n\n\t\t// Send initialize message\n\t\tthis._onModuleLoaded = this._protocol.sendMessage(DEFAULT_CHANNEL, INITIALIZE, [\n\t\t\tthis._worker.getId(),\n\t\t]).then(() => { });\n\n\t\tthis.proxy = this._protocol.createProxyToRemoteChannel(DEFAULT_CHANNEL, async () => { await this._onModuleLoaded; });\n\t\tthis._onModuleLoaded.catch((e) => {\n\t\t\tthis._onError('Worker failed to load ', e);\n\t\t});\n\t}\n\n\tprivate _handleMessage(channelName: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channelName} on main thread`));\n\t\t}\n\n\t\tconst fn = (channel as Record<string, unknown>)[method];\n\t\tif (typeof fn !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on main thread channel ${channelName}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve(fn.apply(channel, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channelName: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\tthrow new Error(`Missing channel ${channelName} on main thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst fn = (channel as Record<string, unknown>)[eventName];\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\tconst event = fn.call(channel, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (channel as Record<string, unknown>)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event as Event<unknown>;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic setChannel<T extends object>(channel: string, handler: T): void {\n\t\tthis._localChannels.set(channel, handler);\n\t}\n\n\tprivate _onError(message: string, error?: unknown): void {\n\t\tconsole.error(message);\n\t\tconsole.info(error);\n\t}\n}\n\nfunction propertyIsEvent(name: string): boolean {\n\t// Assume a property is an event if it has a form of \"onSomething\"\n\treturn name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\n\nfunction propertyIsDynamicEvent(name: string): boolean {\n\t// Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n\treturn /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\n\nexport interface IWebWorkerServerRequestHandler {\n\t_requestHandlerBrand: void;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[prop: string]: any;\n}\n\nexport interface IWebWorkerServerRequestHandlerFactory<T extends IWebWorkerServerRequestHandler> {\n\t(workerServer: IWebWorkerServer): T;\n}\n\n/**\n * Worker side\n */\nexport class WebWorkerServer<T extends IWebWorkerServerRequestHandler> implements IWebWorkerServer {\n\n\tpublic readonly requestHandler: T;\n\tprivate _protocol: WebWorkerProtocol;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\tprivate readonly _remoteChannels: Map<string, object> = new Map();\n\n\tconstructor(postMessage: (msg: Message, transfer?: ArrayBuffer[]) => void, requestHandlerFactory: IWebWorkerServerRequestHandlerFactory<T>) {\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: Message, transfer: ArrayBuffer[]): void => {\n\t\t\t\tpostMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: unknown[]): Promise<unknown> => this._handleMessage(channel, method, args),\n\t\t\thandleEvent: (channel: string, eventName: string, arg: unknown): Event<unknown> => this._handleEvent(channel, eventName, arg)\n\t\t});\n\t\tthis.requestHandler = requestHandlerFactory(this);\n\t}\n\n\tpublic onmessage(msg: unknown): void {\n\t\tthis._protocol.handleMessage(msg);\n\t}\n\n\tprivate _handleMessage(channel: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tif (channel === DEFAULT_CHANNEL && method === INITIALIZE) {\n\t\t\treturn this.initialize(<number>args[0]);\n\t\t}\n\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channel} on worker thread`));\n\t\t}\n\n\t\tconst fn = (requestHandler as Record<string, unknown>)[method];\n\t\tif (typeof fn !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on worker thread channel ${channel}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve(fn.apply(requestHandler, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channel: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\tthrow new Error(`Missing channel ${channel} on worker thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst fn = (requestHandler as Record<string, unknown>)[eventName];\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\n\t\t\tconst event = fn.call(requestHandler, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (requestHandler as Record<string, unknown>)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event as Event<unknown>;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic getChannel<T extends object>(channel: string): Proxied<T> {\n\t\tif (!this._remoteChannels.has(channel)) {\n\t\t\tconst inst = this._protocol.createProxyToRemoteChannel(channel);\n\t\t\tthis._remoteChannels.set(channel, inst);\n\t\t}\n\t\treturn this._remoteChannels.get(channel) as Proxied<T>;\n\t}\n\n\tprivate async initialize(workerId: number): Promise<void> {\n\t\tthis._protocol.setWorkerId(workerId);\n\t}\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport { CharCode } from '../charCode.js';\nimport { onUnexpectedError, SerializedError, transformErrorForSerialization } from '../errors.js';\nimport { Emitter, Event } from '../event.js';\nimport { Disposable, IDisposable } from '../lifecycle.js';\nimport { isWeb } from '../platform.js';\nimport * as strings from '../strings.js';\n\nconst DEFAULT_CHANNEL = 'default';\nconst INITIALIZE = '$initialize';\n\nexport interface IWebWorker extends IDisposable {\n\tgetId(): number;\n\tonMessage: Event<Message>;\n\tonError: Event<unknown>;\n\tpostMessage(message: Message, transfer: ArrayBuffer[]): void;\n}\n\nlet webWorkerWarningLogged = false;\nexport function logOnceWebWorkerWarning(err: unknown): void {\n\tif (!isWeb) {\n\t\t// running tests\n\t\treturn;\n\t}\n\tif (!webWorkerWarningLogged) {\n\t\twebWorkerWarningLogged = true;\n\t\tconsole.warn('Could not create web worker(s). Falling back to loading web worker code in main thread, which might cause UI freezes. Please see https://github.com/microsoft/monaco-editor#faq');\n\t}\n\tconsole.warn((err as Error).message);\n}\n\nconst enum MessageType {\n\tRequest,\n\tReply,\n\tSubscribeEvent,\n\tEvent,\n\tUnsubscribeEvent\n}\nclass RequestMessage {\n\tpublic readonly type = MessageType.Request;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly method: string,\n\t\tpublic readonly args: unknown[]\n\t) { }\n}\nclass ReplyMessage {\n\tpublic readonly type = MessageType.Reply;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly seq: string,\n\t\tpublic readonly res: unknown,\n\t\tpublic readonly err: unknown | SerializedError\n\t) { }\n}\nclass SubscribeEventMessage {\n\tpublic readonly type = MessageType.SubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly channel: string,\n\t\tpublic readonly eventName: string,\n\t\tpublic readonly arg: unknown\n\t) { }\n}\nclass EventMessage {\n\tpublic readonly type = MessageType.Event;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string,\n\t\tpublic readonly event: unknown\n\t) { }\n}\nclass UnsubscribeEventMessage {\n\tpublic readonly type = MessageType.UnsubscribeEvent;\n\tconstructor(\n\t\tpublic readonly vsWorker: number,\n\t\tpublic readonly req: string\n\t) { }\n}\nexport type Message = RequestMessage | ReplyMessage | SubscribeEventMessage | EventMessage | UnsubscribeEventMessage;\n\ninterface IMessageReply {\n\tresolve: (value?: unknown) => void;\n\treject: (error?: unknown) => void;\n}\n\ninterface IMessageHandler {\n\tsendMessage(msg: unknown, transfer?: ArrayBuffer[]): void;\n\thandleMessage(channel: string, method: string, args: unknown[]): Promise<unknown>;\n\thandleEvent(channel: string, eventName: string, arg: unknown): Event<unknown>;\n}\n\nclass WebWorkerProtocol {\n\n\tprivate _workerId: number;\n\tprivate _lastSentReq: number;\n\tprivate _pendingReplies: { [req: string]: IMessageReply };\n\tprivate _pendingEmitters: Map<string, Emitter<unknown>>;\n\tprivate _pendingEvents: Map<string, IDisposable>;\n\tprivate _handler: IMessageHandler;\n\n\tconstructor(handler: IMessageHandler) {\n\t\tthis._workerId = -1;\n\t\tthis._handler = handler;\n\t\tthis._lastSentReq = 0;\n\t\tthis._pendingReplies = Object.create(null);\n\t\tthis._pendingEmitters = new Map<string, Emitter<unknown>>();\n\t\tthis._pendingEvents = new Map<string, IDisposable>();\n\t}\n\n\tpublic setWorkerId(workerId: number): void {\n\t\tthis._workerId = workerId;\n\t}\n\n\tpublic async sendMessage(channel: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tconst req = String(++this._lastSentReq);\n\t\treturn new Promise<unknown>((resolve, reject) => {\n\t\t\tthis._pendingReplies[req] = {\n\t\t\t\tresolve: resolve,\n\t\t\t\treject: reject\n\t\t\t};\n\t\t\tthis._send(new RequestMessage(this._workerId, req, channel, method, args));\n\t\t});\n\t}\n\n\tpublic listen(channel: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tlet req: string | null = null;\n\t\tconst emitter = new Emitter<unknown>({\n\t\t\tonWillAddFirstListener: () => {\n\t\t\t\treq = String(++this._lastSentReq);\n\t\t\t\tthis._pendingEmitters.set(req, emitter);\n\t\t\t\tthis._send(new SubscribeEventMessage(this._workerId, req, channel, eventName, arg));\n\t\t\t},\n\t\t\tonDidRemoveLastListener: () => {\n\t\t\t\tthis._pendingEmitters.delete(req!);\n\t\t\t\tthis._send(new UnsubscribeEventMessage(this._workerId, req!));\n\t\t\t\treq = null;\n\t\t\t}\n\t\t});\n\t\treturn emitter.event;\n\t}\n\n\tpublic handleMessage(message: unknown): void {\n\t\tif (!message || !(message as Message).vsWorker) {\n\t\t\treturn;\n\t\t}\n\t\tif (this._workerId !== -1 && (message as Message).vsWorker !== this._workerId) {\n\t\t\treturn;\n\t\t}\n\t\tthis._handleMessage(message as Message);\n\t}\n\n\tpublic createProxyToRemoteChannel<T extends object>(channel: string, sendMessageBarrier?: () => Promise<void>): T {\n\t\tconst handler = {\n\t\t\tget: (target: Record<PropertyKey, unknown>, name: PropertyKey) => {\n\t\t\t\tif (typeof name === 'string' && !target[name]) {\n\t\t\t\t\tif (propertyIsDynamicEvent(name)) { // onDynamic...\n\t\t\t\t\t\ttarget[name] = (arg: unknown): Event<unknown> => {\n\t\t\t\t\t\t\treturn this.listen(channel, name, arg);\n\t\t\t\t\t\t};\n\t\t\t\t\t} else if (propertyIsEvent(name)) { // on...\n\t\t\t\t\t\ttarget[name] = this.listen(channel, name, undefined);\n\t\t\t\t\t} else if (name.charCodeAt(0) === CharCode.DollarSign) { // $...\n\t\t\t\t\t\ttarget[name] = async (...myArgs: unknown[]) => {\n\t\t\t\t\t\t\tawait sendMessageBarrier?.();\n\t\t\t\t\t\t\treturn this.sendMessage(channel, name, myArgs);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn target[name];\n\t\t\t}\n\t\t};\n\t\treturn new Proxy(Object.create(null), handler);\n\t}\n\n\tprivate _handleMessage(msg: Message): void {\n\t\tswitch (msg.type) {\n\t\t\tcase MessageType.Reply:\n\t\t\t\treturn this._handleReplyMessage(msg);\n\t\t\tcase MessageType.Request:\n\t\t\t\treturn this._handleRequestMessage(msg);\n\t\t\tcase MessageType.SubscribeEvent:\n\t\t\t\treturn this._handleSubscribeEventMessage(msg);\n\t\t\tcase MessageType.Event:\n\t\t\t\treturn this._handleEventMessage(msg);\n\t\t\tcase MessageType.UnsubscribeEvent:\n\t\t\t\treturn this._handleUnsubscribeEventMessage(msg);\n\t\t}\n\t}\n\n\tprivate _handleReplyMessage(replyMessage: ReplyMessage): void {\n\t\tif (!this._pendingReplies[replyMessage.seq]) {\n\t\t\tconsole.warn('Got reply to unknown seq');\n\t\t\treturn;\n\t\t}\n\n\t\tconst reply = this._pendingReplies[replyMessage.seq];\n\t\tdelete this._pendingReplies[replyMessage.seq];\n\n\t\tif (replyMessage.err) {\n\t\t\tlet err = replyMessage.err;\n\t\t\tif ((replyMessage.err as SerializedError).$isError) {\n\t\t\t\tconst newErr = new Error();\n\t\t\t\tnewErr.name = (replyMessage.err as SerializedError).name;\n\t\t\t\tnewErr.message = (replyMessage.err as SerializedError).message;\n\t\t\t\tnewErr.stack = (replyMessage.err as SerializedError).stack;\n\t\t\t\terr = newErr;\n\t\t\t}\n\t\t\treply.reject(err);\n\t\t\treturn;\n\t\t}\n\n\t\treply.resolve(replyMessage.res);\n\t}\n\n\tprivate _handleRequestMessage(requestMessage: RequestMessage): void {\n\t\tconst req = requestMessage.req;\n\t\tconst result = this._handler.handleMessage(requestMessage.channel, requestMessage.method, requestMessage.args);\n\t\tresult.then((r) => {\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, r, undefined));\n\t\t}, (e) => {\n\t\t\tif (e.detail instanceof Error) {\n\t\t\t\t// Loading errors have a detail property that points to the actual error\n\t\t\t\te.detail = transformErrorForSerialization(e.detail);\n\t\t\t}\n\t\t\tthis._send(new ReplyMessage(this._workerId, req, undefined, transformErrorForSerialization(e)));\n\t\t});\n\t}\n\n\tprivate _handleSubscribeEventMessage(msg: SubscribeEventMessage): void {\n\t\tconst req = msg.req;\n\t\tconst disposable = this._handler.handleEvent(msg.channel, msg.eventName, msg.arg)((event) => {\n\t\t\tthis._send(new EventMessage(this._workerId, req, event));\n\t\t});\n\t\tthis._pendingEvents.set(req, disposable);\n\t}\n\n\tprivate _handleEventMessage(msg: EventMessage): void {\n\t\tif (!this._pendingEmitters.has(msg.req)) {\n\t\t\tconsole.warn('Got event for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEmitters.get(msg.req)!.fire(msg.event);\n\t}\n\n\tprivate _handleUnsubscribeEventMessage(msg: UnsubscribeEventMessage): void {\n\t\tif (!this._pendingEvents.has(msg.req)) {\n\t\t\tconsole.warn('Got unsubscribe for unknown req');\n\t\t\treturn;\n\t\t}\n\t\tthis._pendingEvents.get(msg.req)!.dispose();\n\t\tthis._pendingEvents.delete(msg.req);\n\t}\n\n\tprivate _send(msg: Message): void {\n\t\tconst transfer: ArrayBuffer[] = [];\n\t\tif (msg.type === MessageType.Request) {\n\t\t\tfor (let i = 0; i < msg.args.length; i++) {\n\t\t\t\tconst arg = msg.args[i];\n\t\t\t\tif (arg instanceof ArrayBuffer) {\n\t\t\t\t\ttransfer.push(arg);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (msg.type === MessageType.Reply) {\n\t\t\tif (msg.res instanceof ArrayBuffer) {\n\t\t\t\ttransfer.push(msg.res);\n\t\t\t}\n\t\t}\n\t\tthis._handler.sendMessage(msg, transfer);\n\t}\n}\n\ntype ProxiedMethodName = (`$${string}` | `on${string}`);\n\nexport type Proxied<T> = { [K in keyof T]: T[K] extends (...args: infer A) => infer R\n\t? (\n\t\tK extends ProxiedMethodName\n\t\t? (...args: A) => Promise<Awaited<R>>\n\t\t: never\n\t)\n\t: never\n};\n\nexport interface IWebWorkerClient<TProxy> {\n\tproxy: Proxied<TProxy>;\n\tdispose(): void;\n\tsetChannel<T extends object>(channel: string, handler: T): void;\n}\n\nexport interface IWebWorkerServer {\n\tgetChannel<T extends object>(channel: string): Proxied<T>;\n}\n\n/**\n * Main thread side\n */\nexport class WebWorkerClient<W extends object> extends Disposable implements IWebWorkerClient<W> {\n\n\tprivate readonly _worker: IWebWorker;\n\tprivate readonly _onModuleLoaded: Promise<void>;\n\tprivate readonly _protocol: WebWorkerProtocol;\n\tpublic readonly proxy: Proxied<W>;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\n\tconstructor(\n\t\tworker: IWebWorker\n\t) {\n\t\tsuper();\n\n\t\tthis._worker = this._register(worker);\n\t\tthis._register(this._worker.onMessage((msg) => {\n\t\t\tthis._protocol.handleMessage(msg);\n\t\t}));\n\t\tthis._register(this._worker.onError((err) => {\n\t\t\tlogOnceWebWorkerWarning(err);\n\t\t\tonUnexpectedError(err);\n\t\t}));\n\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: Message, transfer: ArrayBuffer[]): void => {\n\t\t\t\tthis._worker.postMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: unknown[]): Promise<unknown> => {\n\t\t\t\treturn this._handleMessage(channel, method, args);\n\t\t\t},\n\t\t\thandleEvent: (channel: string, eventName: string, arg: unknown): Event<unknown> => {\n\t\t\t\treturn this._handleEvent(channel, eventName, arg);\n\t\t\t}\n\t\t});\n\t\tthis._protocol.setWorkerId(this._worker.getId());\n\n\t\t// Send initialize message\n\t\tthis._onModuleLoaded = this._protocol.sendMessage(DEFAULT_CHANNEL, INITIALIZE, [\n\t\t\tthis._worker.getId(),\n\t\t]).then(() => { });\n\n\t\tthis.proxy = this._protocol.createProxyToRemoteChannel(DEFAULT_CHANNEL, async () => { await this._onModuleLoaded; });\n\t\tthis._onModuleLoaded.catch((e) => {\n\t\t\tthis._onError('Worker failed to load ', e);\n\t\t});\n\t}\n\n\tprivate _handleMessage(channelName: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channelName} on main thread`));\n\t\t}\n\n\t\tconst fn = (channel as Record<string, unknown>)[method];\n\t\tif (typeof fn !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on main thread channel ${channelName}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve(fn.apply(channel, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channelName: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tconst channel: object | undefined = this._localChannels.get(channelName);\n\t\tif (!channel) {\n\t\t\tthrow new Error(`Missing channel ${channelName} on main thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst fn = (channel as Record<string, unknown>)[eventName];\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\tconst event = fn.call(channel, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (channel as Record<string, unknown>)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on main thread channel ${channelName}.`);\n\t\t\t}\n\t\t\treturn event as Event<unknown>;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic setChannel<T extends object>(channel: string, handler: T): void {\n\t\tthis._localChannels.set(channel, handler);\n\t}\n\n\tprivate _onError(message: string, error?: unknown): void {\n\t\tconsole.error(message);\n\t\tconsole.info(error);\n\t}\n}\n\nfunction propertyIsEvent(name: string): boolean {\n\t// Assume a property is an event if it has a form of \"onSomething\"\n\treturn name[0] === 'o' && name[1] === 'n' && strings.isUpperAsciiLetter(name.charCodeAt(2));\n}\n\nfunction propertyIsDynamicEvent(name: string): boolean {\n\t// Assume a property is a dynamic event (a method that returns an event) if it has a form of \"onDynamicSomething\"\n\treturn /^onDynamic/.test(name) && strings.isUpperAsciiLetter(name.charCodeAt(9));\n}\n\nexport interface IWebWorkerServerRequestHandler {\n\t_requestHandlerBrand: void;\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t[prop: string]: any;\n}\n\nexport interface IWebWorkerServerRequestHandlerFactory<T extends IWebWorkerServerRequestHandler> {\n\t(workerServer: IWebWorkerServer): T;\n}\n\n/**\n * Worker side\n */\nexport class WebWorkerServer<T extends IWebWorkerServerRequestHandler> implements IWebWorkerServer {\n\n\tpublic readonly requestHandler: T;\n\tprivate _protocol: WebWorkerProtocol;\n\tprivate readonly _localChannels: Map<string, object> = new Map();\n\tprivate readonly _remoteChannels: Map<string, object> = new Map();\n\n\tconstructor(postMessage: (msg: Message, transfer?: ArrayBuffer[]) => void, requestHandlerFactory: IWebWorkerServerRequestHandlerFactory<T>) {\n\t\tthis._protocol = new WebWorkerProtocol({\n\t\t\tsendMessage: (msg: Message, transfer: ArrayBuffer[]): void => {\n\t\t\t\tpostMessage(msg, transfer);\n\t\t\t},\n\t\t\thandleMessage: (channel: string, method: string, args: unknown[]): Promise<unknown> => this._handleMessage(channel, method, args),\n\t\t\thandleEvent: (channel: string, eventName: string, arg: unknown): Event<unknown> => this._handleEvent(channel, eventName, arg)\n\t\t});\n\t\tthis.requestHandler = requestHandlerFactory(this);\n\t}\n\n\tpublic onmessage(msg: unknown): void {\n\t\tthis._protocol.handleMessage(msg);\n\t}\n\n\tprivate _handleMessage(channel: string, method: string, args: unknown[]): Promise<unknown> {\n\t\tif (channel === DEFAULT_CHANNEL && method === INITIALIZE) {\n\t\t\treturn this.initialize(<number>args[0]);\n\t\t}\n\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\treturn Promise.reject(new Error(`Missing channel ${channel} on worker thread`));\n\t\t}\n\n\t\tconst fn = (requestHandler as Record<string, unknown>)[method];\n\t\tif (typeof fn !== 'function') {\n\t\t\treturn Promise.reject(new Error(`Missing method ${method} on worker thread channel ${channel}`));\n\t\t}\n\n\t\ttry {\n\t\t\treturn Promise.resolve(fn.apply(requestHandler, args));\n\t\t} catch (e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n\n\tprivate _handleEvent(channel: string, eventName: string, arg: unknown): Event<unknown> {\n\t\tconst requestHandler: object | null | undefined = (channel === DEFAULT_CHANNEL ? this.requestHandler : this._localChannels.get(channel));\n\t\tif (!requestHandler) {\n\t\t\tthrow new Error(`Missing channel ${channel} on worker thread`);\n\t\t}\n\t\tif (propertyIsDynamicEvent(eventName)) {\n\t\t\tconst fn = (requestHandler as Record<string, unknown>)[eventName];\n\t\t\tif (typeof fn !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\n\t\t\tconst event = fn.call(requestHandler, arg);\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing dynamic event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event;\n\t\t}\n\t\tif (propertyIsEvent(eventName)) {\n\t\t\tconst event = (requestHandler as Record<string, unknown>)[eventName];\n\t\t\tif (typeof event !== 'function') {\n\t\t\t\tthrow new Error(`Missing event ${eventName} on request handler.`);\n\t\t\t}\n\t\t\treturn event as Event<unknown>;\n\t\t}\n\t\tthrow new Error(`Malformed event name ${eventName}`);\n\t}\n\n\tpublic getChannel<T extends object>(channel: string): Proxied<T> {\n\t\tif (!this._remoteChannels.has(channel)) {\n\t\t\tconst inst = this._protocol.createProxyToRemoteChannel(channel);\n\t\t\tthis._remoteChannels.set(channel, inst);\n\t\t}\n\t\treturn this._remoteChannels.get(channel) as Proxied<T>;\n\t}\n\n\tprivate async initialize(workerId: number): Promise<void> {\n\t\tthis._protocol.setWorkerId(workerId);\n\t}\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sandboxTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sandboxTypes.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sources":["vs/base/parts/sandbox/common/sandboxTypes.ts"],"names":[],"mappings":"","sourcesContent":["\nimport { IProductConfiguration } from '../../../common/product.js';\n\n\n// #######################################################################\n// ### ###\n// ### Types we need in a common layer for reuse \t ###\n// ### ###\n// #######################################################################\n\n\n/**\n * The common properties required for any sandboxed\n * renderer to function.\n */\nexport interface ISandboxConfiguration {\n\n\t/**\n\t * Product configuration.\n\t */\n\tproduct: IProductConfiguration;\n}\n"]}
@@ -23,7 +23,7 @@ import { migrateOptions } from './migrateOptions.js';
23
23
  import { TabFocus } from './tabFocus.js';
24
24
  import { ComputeOptionsMemory, ConfigurationChangedEvent, editorOptionsRegistry } from '../../common/config/editorOptions.js';
25
25
  import { EditorZoom } from '../../common/config/editorZoom.js';
26
- import { BareFontInfo } from '../../common/config/fontInfo.js';
26
+ import { createBareFontInfoFromValidatedSettings } from '../../common/config/fontInfoFromSettings.js';
27
27
  import { IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';
28
28
  import { getWindow, getWindowById } from '../../../base/browser/dom.js';
29
29
  import { PixelRatio } from '../../../base/browser/pixelRatio.js';
@@ -73,7 +73,7 @@ let EditorConfiguration = class EditorConfiguration extends Disposable {
73
73
  }
74
74
  _computeOptions() {
75
75
  const partialEnv = this._readEnvConfiguration();
76
- const bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);
76
+ const bareFontInfo = createBareFontInfoFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);
77
77
  const fontInfo = this._readFontInfo(bareFontInfo);
78
78
  const env = {
79
79
  memory: this._computeOptionsMemory,
@@ -101,6 +101,7 @@ let EditorConfiguration = class EditorConfiguration extends Disposable {
101
101
  outerHeight: this._containerObserver.getHeight(),
102
102
  emptySelectionClipboard: browser.isWebKit || browser.isFirefox,
103
103
  pixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,
104
+ // eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any
104
105
  editContextSupported: typeof globalThis.EditContext === 'function',
105
106
  accessibilitySupport: (this._accessibilityService.isScreenReaderOptimized()
106
107
  ? 2 /* AccessibilitySupport.Enabled */
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/config/editorConfiguration.ts","vs/editor/browser/config/editorConfiguration.ts"],"names":[],"mappings":"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","file":"editorConfiguration.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as browser from '../../../base/browser/browser.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { FontMeasurements } from './fontMeasurements.js';\nimport { migrateOptions } from './migrateOptions.js';\nimport { TabFocus } from './tabFocus.js';\nimport { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo, FontInfo, IValidatedEditorOptions } from '../../common/config/fontInfo.js';\nimport { IDimension } from '../../common/core/2d/dimension.js';\nimport { IEditorConfiguration } from '../../common/config/editorConfiguration.js';\nimport { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { getWindow, getWindowById } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { InputMode } from '../../common/inputMode.js';\n\nexport interface IEditorConstructionOptions extends IEditorOptions {\n\t/**\n\t * The initial editor dimension (to avoid measuring the container).\n\t */\n\tdimension?: IDimension;\n\t/**\n\t * Place overflow widgets inside an external DOM node.\n\t * Defaults to an internal DOM node.\n\t */\n\toverflowWidgetsDomNode?: HTMLElement;\n}\n\nexport class EditorConfiguration extends Disposable implements IEditorConfiguration {\n\n\tprivate _onDidChange = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChange: Event<ConfigurationChangedEvent> = this._onDidChange.event;\n\n\tprivate _onDidChangeFast = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChangeFast: Event<ConfigurationChangedEvent> = this._onDidChangeFast.event;\n\n\tpublic readonly isSimpleWidget: boolean;\n\tpublic readonly contextMenuId: MenuId;\n\tprivate readonly _containerObserver: ElementSizeObserver;\n\n\tprivate _isDominatedByLongLines: boolean = false;\n\tprivate _viewLineCount: number = 1;\n\tprivate _lineNumbersDigitCount: number = 1;\n\tprivate _reservedHeight: number = 0;\n\tprivate _glyphMarginDecorationLaneCount: number = 1;\n\tprivate _targetWindowId: number;\n\n\tprivate readonly _computeOptionsMemory: ComputeOptionsMemory = new ComputeOptionsMemory();\n\t/**\n\t * Raw options as they were passed in and merged with all calls to `updateOptions`.\n\t */\n\tprivate readonly _rawOptions: IEditorOptions;\n\t/**\n\t * Validated version of `_rawOptions`.\n\t */\n\tprivate _validatedOptions: ValidatedEditorOptions;\n\t/**\n\t * Complete options which are a combination of passed in options and env values.\n\t */\n\tpublic options: ComputedEditorOptions;\n\n\tconstructor(\n\t\tisSimpleWidget: boolean,\n\t\tcontextMenuId: MenuId,\n\t\toptions: Readonly<IEditorConstructionOptions>,\n\t\tcontainer: HTMLElement | null,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis.isSimpleWidget = isSimpleWidget;\n\t\tthis.contextMenuId = contextMenuId;\n\t\tthis._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));\n\t\tthis._targetWindowId = getWindow(container).vscodeWindowId;\n\n\t\tthis._rawOptions = deepCloneAndMigrateOptions(options);\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis.options = this._computeOptions();\n\n\t\tif (this.options.get(EditorOption.automaticLayout)) {\n\t\t\tthis._containerObserver.startObserving();\n\t\t}\n\n\t\tthis._register(EditorZoom.onDidChangeZoomLevel(() => this._recomputeOptions()));\n\t\tthis._register(TabFocus.onDidChangeTabFocus(() => this._recomputeOptions()));\n\t\tthis._register(this._containerObserver.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(FontMeasurements.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(PixelRatio.getInstance(getWindow(container)).onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n\t\tthis._register(InputMode.onDidChangeInputMode(() => this._recomputeOptions()));\n\t}\n\n\tprivate _recomputeOptions(): void {\n\t\tconst newOptions = this._computeOptions();\n\t\tconst changeEvent = EditorOptionsUtil.checkEquals(this.options, newOptions);\n\t\tif (changeEvent === null) {\n\t\t\t// nothing changed!\n\t\t\treturn;\n\t\t}\n\n\t\tthis.options = newOptions;\n\t\tthis._onDidChangeFast.fire(changeEvent);\n\t\tthis._onDidChange.fire(changeEvent);\n\t}\n\n\tprivate _computeOptions(): ComputedEditorOptions {\n\t\tconst partialEnv = this._readEnvConfiguration();\n\t\tconst bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);\n\t\tconst fontInfo = this._readFontInfo(bareFontInfo);\n\t\tconst env: IEnvironmentalOptions = {\n\t\t\tmemory: this._computeOptionsMemory,\n\t\t\touterWidth: partialEnv.outerWidth,\n\t\t\touterHeight: partialEnv.outerHeight - this._reservedHeight,\n\t\t\tfontInfo: fontInfo,\n\t\t\textraEditorClassName: partialEnv.extraEditorClassName,\n\t\t\tisDominatedByLongLines: this._isDominatedByLongLines,\n\t\t\tviewLineCount: this._viewLineCount,\n\t\t\tlineNumbersDigitCount: this._lineNumbersDigitCount,\n\t\t\temptySelectionClipboard: partialEnv.emptySelectionClipboard,\n\t\t\tpixelRatio: partialEnv.pixelRatio,\n\t\t\ttabFocusMode: this._validatedOptions.get(EditorOption.tabFocusMode) || TabFocus.getTabFocusMode(),\n\t\t\tinputMode: InputMode.getInputMode(),\n\t\t\taccessibilitySupport: partialEnv.accessibilitySupport,\n\t\t\tglyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount,\n\t\t\teditContextSupported: partialEnv.editContextSupported\n\t\t};\n\t\treturn EditorOptionsUtil.computeOptions(this._validatedOptions, env);\n\t}\n\n\tprotected _readEnvConfiguration(): IEnvConfiguration {\n\t\treturn {\n\t\t\textraEditorClassName: getExtraEditorClassName(),\n\t\t\touterWidth: this._containerObserver.getWidth(),\n\t\t\touterHeight: this._containerObserver.getHeight(),\n\t\t\temptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n\t\t\tpixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,\n\t\t\teditContextSupported: typeof (globalThis as any).EditContext === 'function',\n\t\t\taccessibilitySupport: (\n\t\t\t\tthis._accessibilityService.isScreenReaderOptimized()\n\t\t\t\t\t? AccessibilitySupport.Enabled\n\t\t\t\t\t: this._accessibilityService.getAccessibilitySupport()\n\t\t\t)\n\t\t};\n\t}\n\n\tprotected _readFontInfo(bareFontInfo: BareFontInfo): FontInfo {\n\t\treturn FontMeasurements.readFontInfo(getWindowById(this._targetWindowId, true).window, bareFontInfo);\n\t}\n\n\tpublic getRawOptions(): IEditorOptions {\n\t\treturn this._rawOptions;\n\t}\n\n\tpublic updateOptions(_newOptions: Readonly<IEditorOptions>): void {\n\t\tconst newOptions = deepCloneAndMigrateOptions(_newOptions);\n\n\t\tconst didChange = EditorOptionsUtil.applyUpdate(this._rawOptions, newOptions);\n\t\tif (!didChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic observeContainer(dimension?: IDimension): void {\n\t\tthis._containerObserver.observe(dimension);\n\t}\n\n\tpublic setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {\n\t\tif (this._isDominatedByLongLines === isDominatedByLongLines) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDominatedByLongLines = isDominatedByLongLines;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setModelLineCount(modelLineCount: number): void {\n\t\tconst lineNumbersDigitCount = digitCount(modelLineCount);\n\t\tif (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineNumbersDigitCount = lineNumbersDigitCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setViewLineCount(viewLineCount: number): void {\n\t\tif (this._viewLineCount === viewLineCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._viewLineCount = viewLineCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setReservedHeight(reservedHeight: number) {\n\t\tif (this._reservedHeight === reservedHeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._reservedHeight = reservedHeight;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void {\n\t\tif (this._glyphMarginDecorationLaneCount === decorationLaneCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._glyphMarginDecorationLaneCount = decorationLaneCount;\n\t\tthis._recomputeOptions();\n\t}\n}\n\nfunction digitCount(n: number): number {\n\tlet r = 0;\n\twhile (n) {\n\t\tn = Math.floor(n / 10);\n\t\tr++;\n\t}\n\treturn r ? r : 1;\n}\n\nfunction getExtraEditorClassName(): string {\n\tlet extra = '';\n\tif (browser.isSafari || browser.isWebkitWebView) {\n\t\t// See https://github.com/microsoft/vscode/issues/108822\n\t\textra += 'no-minimap-shadow ';\n\t\textra += 'enable-user-select ';\n\t} else {\n\t\t// Use user-select: none in all browsers except Safari and native macOS WebView\n\t\textra += 'no-user-select ';\n\t}\n\tif (platform.isMacintosh) {\n\t\textra += 'mac ';\n\t}\n\treturn extra;\n}\n\nexport interface IEnvConfiguration {\n\textraEditorClassName: string;\n\touterWidth: number;\n\touterHeight: number;\n\temptySelectionClipboard: boolean;\n\tpixelRatio: number;\n\taccessibilitySupport: AccessibilitySupport;\n\teditContextSupported: boolean;\n}\n\nclass ValidatedEditorOptions implements IValidatedEditorOptions {\n\tprivate readonly _values: any[] = [];\n\tpublic _read<T>(option: EditorOption): T {\n\t\treturn this._values[option];\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._values[id];\n\t}\n\tpublic _write<T>(option: EditorOption, value: T): void {\n\t\tthis._values[option] = value;\n\t}\n}\n\nexport class ComputedEditorOptions implements IComputedEditorOptions {\n\tprivate readonly _values: any[] = [];\n\tpublic _read<T>(id: EditorOption): T {\n\t\tif (id >= this._values.length) {\n\t\t\tthrow new Error('Cannot read uninitialized value');\n\t\t}\n\t\treturn this._values[id];\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._read(id);\n\t}\n\tpublic _write<T>(id: EditorOption, value: T): void {\n\t\tthis._values[id] = value;\n\t}\n}\n\nclass EditorOptionsUtil {\n\n\tpublic static validateOptions(options: IEditorOptions): ValidatedEditorOptions {\n\t\tconst result = new ValidatedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst value = (editorOption.name === '_never_' ? undefined : (options as any)[editorOption.name]);\n\t\t\tresult._write(editorOption.id, editorOption.validate(value));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static computeOptions(options: ValidatedEditorOptions, env: IEnvironmentalOptions): ComputedEditorOptions {\n\t\tconst result = new ComputedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tresult._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _deepEquals<T>(a: T, b: T): boolean {\n\t\tif (typeof a !== 'object' || typeof b !== 'object' || !a || !b) {\n\t\t\treturn a === b;\n\t\t}\n\t\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\t\treturn (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n\t\t}\n\t\tif (Object.keys(a as unknown as object).length !== Object.keys(b as unknown as object).length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const key in a) {\n\t\t\tif (!EditorOptionsUtil._deepEquals(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static checkEquals(a: ComputedEditorOptions, b: ComputedEditorOptions): ConfigurationChangedEvent | null {\n\t\tconst result: boolean[] = [];\n\t\tlet somethingChanged = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst changed = !EditorOptionsUtil._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n\t\t\tresult[editorOption.id] = changed;\n\t\t\tif (changed) {\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\treturn (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n\t}\n\n\t/**\n\t * Returns true if something changed.\n\t * Modifies `options`.\n\t*/\n\tpublic static applyUpdate(options: IEditorOptions, update: Readonly<IEditorOptions>): boolean {\n\t\tlet changed = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tif (update.hasOwnProperty(editorOption.name)) {\n\t\t\t\tconst result = editorOption.applyUpdate((options as any)[editorOption.name], (update as any)[editorOption.name]);\n\t\t\t\t(options as any)[editorOption.name] = result.newValue;\n\t\t\t\tchanged = changed || result.didChange;\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n}\n\nfunction deepCloneAndMigrateOptions(_options: Readonly<IEditorOptions>): IEditorOptions {\n\tconst options = objects.deepClone(_options);\n\tmigrateOptions(options);\n\treturn options;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as browser from '../../../base/browser/browser.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { FontMeasurements } from './fontMeasurements.js';\nimport { migrateOptions } from './migrateOptions.js';\nimport { TabFocus } from './tabFocus.js';\nimport { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo, FontInfo, IValidatedEditorOptions } from '../../common/config/fontInfo.js';\nimport { IDimension } from '../../common/core/2d/dimension.js';\nimport { IEditorConfiguration } from '../../common/config/editorConfiguration.js';\nimport { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { getWindow, getWindowById } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { InputMode } from '../../common/inputMode.js';\n\nexport interface IEditorConstructionOptions extends IEditorOptions {\n\t/**\n\t * The initial editor dimension (to avoid measuring the container).\n\t */\n\tdimension?: IDimension;\n\t/**\n\t * Place overflow widgets inside an external DOM node.\n\t * Defaults to an internal DOM node.\n\t */\n\toverflowWidgetsDomNode?: HTMLElement;\n}\n\nexport class EditorConfiguration extends Disposable implements IEditorConfiguration {\n\n\tprivate _onDidChange = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChange: Event<ConfigurationChangedEvent> = this._onDidChange.event;\n\n\tprivate _onDidChangeFast = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChangeFast: Event<ConfigurationChangedEvent> = this._onDidChangeFast.event;\n\n\tpublic readonly isSimpleWidget: boolean;\n\tpublic readonly contextMenuId: MenuId;\n\tprivate readonly _containerObserver: ElementSizeObserver;\n\n\tprivate _isDominatedByLongLines: boolean = false;\n\tprivate _viewLineCount: number = 1;\n\tprivate _lineNumbersDigitCount: number = 1;\n\tprivate _reservedHeight: number = 0;\n\tprivate _glyphMarginDecorationLaneCount: number = 1;\n\tprivate _targetWindowId: number;\n\n\tprivate readonly _computeOptionsMemory: ComputeOptionsMemory = new ComputeOptionsMemory();\n\t/**\n\t * Raw options as they were passed in and merged with all calls to `updateOptions`.\n\t */\n\tprivate readonly _rawOptions: IEditorOptions;\n\t/**\n\t * Validated version of `_rawOptions`.\n\t */\n\tprivate _validatedOptions: ValidatedEditorOptions;\n\t/**\n\t * Complete options which are a combination of passed in options and env values.\n\t */\n\tpublic options: ComputedEditorOptions;\n\n\tconstructor(\n\t\tisSimpleWidget: boolean,\n\t\tcontextMenuId: MenuId,\n\t\toptions: Readonly<IEditorConstructionOptions>,\n\t\tcontainer: HTMLElement | null,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis.isSimpleWidget = isSimpleWidget;\n\t\tthis.contextMenuId = contextMenuId;\n\t\tthis._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));\n\t\tthis._targetWindowId = getWindow(container).vscodeWindowId;\n\n\t\tthis._rawOptions = deepCloneAndMigrateOptions(options);\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis.options = this._computeOptions();\n\n\t\tif (this.options.get(EditorOption.automaticLayout)) {\n\t\t\tthis._containerObserver.startObserving();\n\t\t}\n\n\t\tthis._register(EditorZoom.onDidChangeZoomLevel(() => this._recomputeOptions()));\n\t\tthis._register(TabFocus.onDidChangeTabFocus(() => this._recomputeOptions()));\n\t\tthis._register(this._containerObserver.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(FontMeasurements.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(PixelRatio.getInstance(getWindow(container)).onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n\t\tthis._register(InputMode.onDidChangeInputMode(() => this._recomputeOptions()));\n\t}\n\n\tprivate _recomputeOptions(): void {\n\t\tconst newOptions = this._computeOptions();\n\t\tconst changeEvent = EditorOptionsUtil.checkEquals(this.options, newOptions);\n\t\tif (changeEvent === null) {\n\t\t\t// nothing changed!\n\t\t\treturn;\n\t\t}\n\n\t\tthis.options = newOptions;\n\t\tthis._onDidChangeFast.fire(changeEvent);\n\t\tthis._onDidChange.fire(changeEvent);\n\t}\n\n\tprivate _computeOptions(): ComputedEditorOptions {\n\t\tconst partialEnv = this._readEnvConfiguration();\n\t\tconst bareFontInfo = BareFontInfo.createFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);\n\t\tconst fontInfo = this._readFontInfo(bareFontInfo);\n\t\tconst env: IEnvironmentalOptions = {\n\t\t\tmemory: this._computeOptionsMemory,\n\t\t\touterWidth: partialEnv.outerWidth,\n\t\t\touterHeight: partialEnv.outerHeight - this._reservedHeight,\n\t\t\tfontInfo: fontInfo,\n\t\t\textraEditorClassName: partialEnv.extraEditorClassName,\n\t\t\tisDominatedByLongLines: this._isDominatedByLongLines,\n\t\t\tviewLineCount: this._viewLineCount,\n\t\t\tlineNumbersDigitCount: this._lineNumbersDigitCount,\n\t\t\temptySelectionClipboard: partialEnv.emptySelectionClipboard,\n\t\t\tpixelRatio: partialEnv.pixelRatio,\n\t\t\ttabFocusMode: this._validatedOptions.get(EditorOption.tabFocusMode) || TabFocus.getTabFocusMode(),\n\t\t\tinputMode: InputMode.getInputMode(),\n\t\t\taccessibilitySupport: partialEnv.accessibilitySupport,\n\t\t\tglyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount,\n\t\t\teditContextSupported: partialEnv.editContextSupported\n\t\t};\n\t\treturn EditorOptionsUtil.computeOptions(this._validatedOptions, env);\n\t}\n\n\tprotected _readEnvConfiguration(): IEnvConfiguration {\n\t\treturn {\n\t\t\textraEditorClassName: getExtraEditorClassName(),\n\t\t\touterWidth: this._containerObserver.getWidth(),\n\t\t\touterHeight: this._containerObserver.getHeight(),\n\t\t\temptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n\t\t\tpixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,\n\t\t\teditContextSupported: typeof (globalThis as any).EditContext === 'function',\n\t\t\taccessibilitySupport: (\n\t\t\t\tthis._accessibilityService.isScreenReaderOptimized()\n\t\t\t\t\t? AccessibilitySupport.Enabled\n\t\t\t\t\t: this._accessibilityService.getAccessibilitySupport()\n\t\t\t)\n\t\t};\n\t}\n\n\tprotected _readFontInfo(bareFontInfo: BareFontInfo): FontInfo {\n\t\treturn FontMeasurements.readFontInfo(getWindowById(this._targetWindowId, true).window, bareFontInfo);\n\t}\n\n\tpublic getRawOptions(): IEditorOptions {\n\t\treturn this._rawOptions;\n\t}\n\n\tpublic updateOptions(_newOptions: Readonly<IEditorOptions>): void {\n\t\tconst newOptions = deepCloneAndMigrateOptions(_newOptions);\n\n\t\tconst didChange = EditorOptionsUtil.applyUpdate(this._rawOptions, newOptions);\n\t\tif (!didChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic observeContainer(dimension?: IDimension): void {\n\t\tthis._containerObserver.observe(dimension);\n\t}\n\n\tpublic setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {\n\t\tif (this._isDominatedByLongLines === isDominatedByLongLines) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDominatedByLongLines = isDominatedByLongLines;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setModelLineCount(modelLineCount: number): void {\n\t\tconst lineNumbersDigitCount = digitCount(modelLineCount);\n\t\tif (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineNumbersDigitCount = lineNumbersDigitCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setViewLineCount(viewLineCount: number): void {\n\t\tif (this._viewLineCount === viewLineCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._viewLineCount = viewLineCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setReservedHeight(reservedHeight: number) {\n\t\tif (this._reservedHeight === reservedHeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._reservedHeight = reservedHeight;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void {\n\t\tif (this._glyphMarginDecorationLaneCount === decorationLaneCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._glyphMarginDecorationLaneCount = decorationLaneCount;\n\t\tthis._recomputeOptions();\n\t}\n}\n\nfunction digitCount(n: number): number {\n\tlet r = 0;\n\twhile (n) {\n\t\tn = Math.floor(n / 10);\n\t\tr++;\n\t}\n\treturn r ? r : 1;\n}\n\nfunction getExtraEditorClassName(): string {\n\tlet extra = '';\n\tif (browser.isSafari || browser.isWebkitWebView) {\n\t\t// See https://github.com/microsoft/vscode/issues/108822\n\t\textra += 'no-minimap-shadow ';\n\t\textra += 'enable-user-select ';\n\t} else {\n\t\t// Use user-select: none in all browsers except Safari and native macOS WebView\n\t\textra += 'no-user-select ';\n\t}\n\tif (platform.isMacintosh) {\n\t\textra += 'mac ';\n\t}\n\treturn extra;\n}\n\nexport interface IEnvConfiguration {\n\textraEditorClassName: string;\n\touterWidth: number;\n\touterHeight: number;\n\temptySelectionClipboard: boolean;\n\tpixelRatio: number;\n\taccessibilitySupport: AccessibilitySupport;\n\teditContextSupported: boolean;\n}\n\nclass ValidatedEditorOptions implements IValidatedEditorOptions {\n\tprivate readonly _values: any[] = [];\n\tpublic _read<T>(option: EditorOption): T {\n\t\treturn this._values[option];\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._values[id];\n\t}\n\tpublic _write<T>(option: EditorOption, value: T): void {\n\t\tthis._values[option] = value;\n\t}\n}\n\nexport class ComputedEditorOptions implements IComputedEditorOptions {\n\tprivate readonly _values: any[] = [];\n\tpublic _read<T>(id: EditorOption): T {\n\t\tif (id >= this._values.length) {\n\t\t\tthrow new Error('Cannot read uninitialized value');\n\t\t}\n\t\treturn this._values[id];\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._read(id);\n\t}\n\tpublic _write<T>(id: EditorOption, value: T): void {\n\t\tthis._values[id] = value;\n\t}\n}\n\nclass EditorOptionsUtil {\n\n\tpublic static validateOptions(options: IEditorOptions): ValidatedEditorOptions {\n\t\tconst result = new ValidatedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst value = (editorOption.name === '_never_' ? undefined : (options as any)[editorOption.name]);\n\t\t\tresult._write(editorOption.id, editorOption.validate(value));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static computeOptions(options: ValidatedEditorOptions, env: IEnvironmentalOptions): ComputedEditorOptions {\n\t\tconst result = new ComputedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tresult._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _deepEquals<T>(a: T, b: T): boolean {\n\t\tif (typeof a !== 'object' || typeof b !== 'object' || !a || !b) {\n\t\t\treturn a === b;\n\t\t}\n\t\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\t\treturn (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n\t\t}\n\t\tif (Object.keys(a as unknown as object).length !== Object.keys(b as unknown as object).length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const key in a) {\n\t\t\tif (!EditorOptionsUtil._deepEquals(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static checkEquals(a: ComputedEditorOptions, b: ComputedEditorOptions): ConfigurationChangedEvent | null {\n\t\tconst result: boolean[] = [];\n\t\tlet somethingChanged = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst changed = !EditorOptionsUtil._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n\t\t\tresult[editorOption.id] = changed;\n\t\t\tif (changed) {\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\treturn (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n\t}\n\n\t/**\n\t * Returns true if something changed.\n\t * Modifies `options`.\n\t*/\n\tpublic static applyUpdate(options: IEditorOptions, update: Readonly<IEditorOptions>): boolean {\n\t\tlet changed = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tif (update.hasOwnProperty(editorOption.name)) {\n\t\t\t\tconst result = editorOption.applyUpdate((options as any)[editorOption.name], (update as any)[editorOption.name]);\n\t\t\t\t(options as any)[editorOption.name] = result.newValue;\n\t\t\t\tchanged = changed || result.didChange;\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n}\n\nfunction deepCloneAndMigrateOptions(_options: Readonly<IEditorOptions>): IEditorOptions {\n\tconst options = objects.deepClone(_options);\n\tmigrateOptions(options);\n\treturn options;\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/editor/browser/config/editorConfiguration.ts","vs/editor/browser/config/editorConfiguration.ts"],"names":[],"mappings":"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","file":"editorConfiguration.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as browser from '../../../base/browser/browser.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { FontMeasurements } from './fontMeasurements.js';\nimport { migrateOptions } from './migrateOptions.js';\nimport { TabFocus } from './tabFocus.js';\nimport { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo, FontInfo, IValidatedEditorOptions } from '../../common/config/fontInfo.js';\nimport { createBareFontInfoFromValidatedSettings } from '../../common/config/fontInfoFromSettings.js';\nimport { IDimension } from '../../common/core/2d/dimension.js';\nimport { IEditorConfiguration } from '../../common/config/editorConfiguration.js';\nimport { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { getWindow, getWindowById } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { InputMode } from '../../common/inputMode.js';\n\nexport interface IEditorConstructionOptions extends IEditorOptions {\n\t/**\n\t * The initial editor dimension (to avoid measuring the container).\n\t */\n\tdimension?: IDimension;\n\t/**\n\t * Place overflow widgets inside an external DOM node.\n\t * Defaults to an internal DOM node.\n\t */\n\toverflowWidgetsDomNode?: HTMLElement;\n}\n\nexport class EditorConfiguration extends Disposable implements IEditorConfiguration {\n\n\tprivate _onDidChange = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChange: Event<ConfigurationChangedEvent> = this._onDidChange.event;\n\n\tprivate _onDidChangeFast = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChangeFast: Event<ConfigurationChangedEvent> = this._onDidChangeFast.event;\n\n\tpublic readonly isSimpleWidget: boolean;\n\tpublic readonly contextMenuId: MenuId;\n\tprivate readonly _containerObserver: ElementSizeObserver;\n\n\tprivate _isDominatedByLongLines: boolean = false;\n\tprivate _viewLineCount: number = 1;\n\tprivate _lineNumbersDigitCount: number = 1;\n\tprivate _reservedHeight: number = 0;\n\tprivate _glyphMarginDecorationLaneCount: number = 1;\n\tprivate _targetWindowId: number;\n\n\tprivate readonly _computeOptionsMemory: ComputeOptionsMemory = new ComputeOptionsMemory();\n\t/**\n\t * Raw options as they were passed in and merged with all calls to `updateOptions`.\n\t */\n\tprivate readonly _rawOptions: IEditorOptions;\n\t/**\n\t * Validated version of `_rawOptions`.\n\t */\n\tprivate _validatedOptions: ValidatedEditorOptions;\n\t/**\n\t * Complete options which are a combination of passed in options and env values.\n\t */\n\tpublic options: ComputedEditorOptions;\n\n\tconstructor(\n\t\tisSimpleWidget: boolean,\n\t\tcontextMenuId: MenuId,\n\t\toptions: Readonly<IEditorConstructionOptions>,\n\t\tcontainer: HTMLElement | null,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis.isSimpleWidget = isSimpleWidget;\n\t\tthis.contextMenuId = contextMenuId;\n\t\tthis._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));\n\t\tthis._targetWindowId = getWindow(container).vscodeWindowId;\n\n\t\tthis._rawOptions = deepCloneAndMigrateOptions(options);\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis.options = this._computeOptions();\n\n\t\tif (this.options.get(EditorOption.automaticLayout)) {\n\t\t\tthis._containerObserver.startObserving();\n\t\t}\n\n\t\tthis._register(EditorZoom.onDidChangeZoomLevel(() => this._recomputeOptions()));\n\t\tthis._register(TabFocus.onDidChangeTabFocus(() => this._recomputeOptions()));\n\t\tthis._register(this._containerObserver.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(FontMeasurements.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(PixelRatio.getInstance(getWindow(container)).onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n\t\tthis._register(InputMode.onDidChangeInputMode(() => this._recomputeOptions()));\n\t}\n\n\tprivate _recomputeOptions(): void {\n\t\tconst newOptions = this._computeOptions();\n\t\tconst changeEvent = EditorOptionsUtil.checkEquals(this.options, newOptions);\n\t\tif (changeEvent === null) {\n\t\t\t// nothing changed!\n\t\t\treturn;\n\t\t}\n\n\t\tthis.options = newOptions;\n\t\tthis._onDidChangeFast.fire(changeEvent);\n\t\tthis._onDidChange.fire(changeEvent);\n\t}\n\n\tprivate _computeOptions(): ComputedEditorOptions {\n\t\tconst partialEnv = this._readEnvConfiguration();\n\t\tconst bareFontInfo = createBareFontInfoFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);\n\t\tconst fontInfo = this._readFontInfo(bareFontInfo);\n\t\tconst env: IEnvironmentalOptions = {\n\t\t\tmemory: this._computeOptionsMemory,\n\t\t\touterWidth: partialEnv.outerWidth,\n\t\t\touterHeight: partialEnv.outerHeight - this._reservedHeight,\n\t\t\tfontInfo: fontInfo,\n\t\t\textraEditorClassName: partialEnv.extraEditorClassName,\n\t\t\tisDominatedByLongLines: this._isDominatedByLongLines,\n\t\t\tviewLineCount: this._viewLineCount,\n\t\t\tlineNumbersDigitCount: this._lineNumbersDigitCount,\n\t\t\temptySelectionClipboard: partialEnv.emptySelectionClipboard,\n\t\t\tpixelRatio: partialEnv.pixelRatio,\n\t\t\ttabFocusMode: this._validatedOptions.get(EditorOption.tabFocusMode) || TabFocus.getTabFocusMode(),\n\t\t\tinputMode: InputMode.getInputMode(),\n\t\t\taccessibilitySupport: partialEnv.accessibilitySupport,\n\t\t\tglyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount,\n\t\t\teditContextSupported: partialEnv.editContextSupported\n\t\t};\n\t\treturn EditorOptionsUtil.computeOptions(this._validatedOptions, env);\n\t}\n\n\tprotected _readEnvConfiguration(): IEnvConfiguration {\n\t\treturn {\n\t\t\textraEditorClassName: getExtraEditorClassName(),\n\t\t\touterWidth: this._containerObserver.getWidth(),\n\t\t\touterHeight: this._containerObserver.getHeight(),\n\t\t\temptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n\t\t\tpixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,\n\t\t\t// eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any\n\t\t\teditContextSupported: typeof (globalThis as any).EditContext === 'function',\n\t\t\taccessibilitySupport: (\n\t\t\t\tthis._accessibilityService.isScreenReaderOptimized()\n\t\t\t\t\t? AccessibilitySupport.Enabled\n\t\t\t\t\t: this._accessibilityService.getAccessibilitySupport()\n\t\t\t)\n\t\t};\n\t}\n\n\tprotected _readFontInfo(bareFontInfo: BareFontInfo): FontInfo {\n\t\treturn FontMeasurements.readFontInfo(getWindowById(this._targetWindowId, true).window, bareFontInfo);\n\t}\n\n\tpublic getRawOptions(): IEditorOptions {\n\t\treturn this._rawOptions;\n\t}\n\n\tpublic updateOptions(_newOptions: Readonly<IEditorOptions>): void {\n\t\tconst newOptions = deepCloneAndMigrateOptions(_newOptions);\n\n\t\tconst didChange = EditorOptionsUtil.applyUpdate(this._rawOptions, newOptions);\n\t\tif (!didChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic observeContainer(dimension?: IDimension): void {\n\t\tthis._containerObserver.observe(dimension);\n\t}\n\n\tpublic setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {\n\t\tif (this._isDominatedByLongLines === isDominatedByLongLines) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDominatedByLongLines = isDominatedByLongLines;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setModelLineCount(modelLineCount: number): void {\n\t\tconst lineNumbersDigitCount = digitCount(modelLineCount);\n\t\tif (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineNumbersDigitCount = lineNumbersDigitCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setViewLineCount(viewLineCount: number): void {\n\t\tif (this._viewLineCount === viewLineCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._viewLineCount = viewLineCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setReservedHeight(reservedHeight: number) {\n\t\tif (this._reservedHeight === reservedHeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._reservedHeight = reservedHeight;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void {\n\t\tif (this._glyphMarginDecorationLaneCount === decorationLaneCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._glyphMarginDecorationLaneCount = decorationLaneCount;\n\t\tthis._recomputeOptions();\n\t}\n}\n\nfunction digitCount(n: number): number {\n\tlet r = 0;\n\twhile (n) {\n\t\tn = Math.floor(n / 10);\n\t\tr++;\n\t}\n\treturn r ? r : 1;\n}\n\nfunction getExtraEditorClassName(): string {\n\tlet extra = '';\n\tif (browser.isSafari || browser.isWebkitWebView) {\n\t\t// See https://github.com/microsoft/vscode/issues/108822\n\t\textra += 'no-minimap-shadow ';\n\t\textra += 'enable-user-select ';\n\t} else {\n\t\t// Use user-select: none in all browsers except Safari and native macOS WebView\n\t\textra += 'no-user-select ';\n\t}\n\tif (platform.isMacintosh) {\n\t\textra += 'mac ';\n\t}\n\treturn extra;\n}\n\nexport interface IEnvConfiguration {\n\textraEditorClassName: string;\n\touterWidth: number;\n\touterHeight: number;\n\temptySelectionClipboard: boolean;\n\tpixelRatio: number;\n\taccessibilitySupport: AccessibilitySupport;\n\teditContextSupported: boolean;\n}\n\nclass ValidatedEditorOptions implements IValidatedEditorOptions {\n\tprivate readonly _values: unknown[] = [];\n\tpublic _read<T>(option: EditorOption): T {\n\t\treturn this._values[option] as T;\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._values[id] as FindComputedEditorOptionValueById<T>;\n\t}\n\tpublic _write<T>(option: EditorOption, value: T): void {\n\t\tthis._values[option] = value;\n\t}\n}\n\nexport class ComputedEditorOptions implements IComputedEditorOptions {\n\tprivate readonly _values: unknown[] = [];\n\tpublic _read<T>(id: EditorOption): T {\n\t\tif (id >= this._values.length) {\n\t\t\tthrow new Error('Cannot read uninitialized value');\n\t\t}\n\t\treturn this._values[id] as T;\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._read(id);\n\t}\n\tpublic _write<T>(id: EditorOption, value: T): void {\n\t\tthis._values[id] = value;\n\t}\n}\n\nclass EditorOptionsUtil {\n\n\tpublic static validateOptions(options: IEditorOptions): ValidatedEditorOptions {\n\t\tconst result = new ValidatedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst value = (editorOption.name === '_never_' ? undefined : (options as Record<string, unknown>)[editorOption.name]);\n\t\t\tresult._write(editorOption.id, editorOption.validate(value));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static computeOptions(options: ValidatedEditorOptions, env: IEnvironmentalOptions): ComputedEditorOptions {\n\t\tconst result = new ComputedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tresult._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _deepEquals<T>(a: T, b: T): boolean {\n\t\tif (typeof a !== 'object' || typeof b !== 'object' || !a || !b) {\n\t\t\treturn a === b;\n\t\t}\n\t\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\t\treturn (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n\t\t}\n\t\tif (Object.keys(a as unknown as object).length !== Object.keys(b as unknown as object).length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const key in a) {\n\t\t\tif (!EditorOptionsUtil._deepEquals(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static checkEquals(a: ComputedEditorOptions, b: ComputedEditorOptions): ConfigurationChangedEvent | null {\n\t\tconst result: boolean[] = [];\n\t\tlet somethingChanged = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst changed = !EditorOptionsUtil._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n\t\t\tresult[editorOption.id] = changed;\n\t\t\tif (changed) {\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\treturn (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n\t}\n\n\t/**\n\t * Returns true if something changed.\n\t * Modifies `options`.\n\t*/\n\tpublic static applyUpdate(options: IEditorOptions, update: Readonly<IEditorOptions>): boolean {\n\t\tlet changed = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tif (update.hasOwnProperty(editorOption.name)) {\n\t\t\t\tconst result = editorOption.applyUpdate((options as Record<string, unknown>)[editorOption.name], (update as Record<string, unknown>)[editorOption.name]);\n\t\t\t\t(options as Record<string, unknown>)[editorOption.name] = result.newValue;\n\t\t\t\tchanged = changed || result.didChange;\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n}\n\nfunction deepCloneAndMigrateOptions(_options: Readonly<IEditorOptions>): IEditorOptions {\n\tconst options = objects.deepClone(_options);\n\tmigrateOptions(options);\n\treturn options;\n}\n","/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\nimport * as browser from '../../../base/browser/browser.js';\nimport * as arrays from '../../../base/common/arrays.js';\nimport { Emitter, Event } from '../../../base/common/event.js';\nimport { Disposable } from '../../../base/common/lifecycle.js';\nimport * as objects from '../../../base/common/objects.js';\nimport * as platform from '../../../base/common/platform.js';\nimport { ElementSizeObserver } from './elementSizeObserver.js';\nimport { FontMeasurements } from './fontMeasurements.js';\nimport { migrateOptions } from './migrateOptions.js';\nimport { TabFocus } from './tabFocus.js';\nimport { ComputeOptionsMemory, ConfigurationChangedEvent, EditorOption, editorOptionsRegistry, FindComputedEditorOptionValueById, IComputedEditorOptions, IEditorOptions, IEnvironmentalOptions } from '../../common/config/editorOptions.js';\nimport { EditorZoom } from '../../common/config/editorZoom.js';\nimport { BareFontInfo, FontInfo, IValidatedEditorOptions } from '../../common/config/fontInfo.js';\nimport { createBareFontInfoFromValidatedSettings } from '../../common/config/fontInfoFromSettings.js';\nimport { IDimension } from '../../common/core/2d/dimension.js';\nimport { IEditorConfiguration } from '../../common/config/editorConfiguration.js';\nimport { AccessibilitySupport, IAccessibilityService } from '../../../platform/accessibility/common/accessibility.js';\nimport { getWindow, getWindowById } from '../../../base/browser/dom.js';\nimport { PixelRatio } from '../../../base/browser/pixelRatio.js';\nimport { MenuId } from '../../../platform/actions/common/actions.js';\nimport { InputMode } from '../../common/inputMode.js';\n\nexport interface IEditorConstructionOptions extends IEditorOptions {\n\t/**\n\t * The initial editor dimension (to avoid measuring the container).\n\t */\n\tdimension?: IDimension;\n\t/**\n\t * Place overflow widgets inside an external DOM node.\n\t * Defaults to an internal DOM node.\n\t */\n\toverflowWidgetsDomNode?: HTMLElement;\n}\n\nexport class EditorConfiguration extends Disposable implements IEditorConfiguration {\n\n\tprivate _onDidChange = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChange: Event<ConfigurationChangedEvent> = this._onDidChange.event;\n\n\tprivate _onDidChangeFast = this._register(new Emitter<ConfigurationChangedEvent>());\n\tpublic readonly onDidChangeFast: Event<ConfigurationChangedEvent> = this._onDidChangeFast.event;\n\n\tpublic readonly isSimpleWidget: boolean;\n\tpublic readonly contextMenuId: MenuId;\n\tprivate readonly _containerObserver: ElementSizeObserver;\n\n\tprivate _isDominatedByLongLines: boolean = false;\n\tprivate _viewLineCount: number = 1;\n\tprivate _lineNumbersDigitCount: number = 1;\n\tprivate _reservedHeight: number = 0;\n\tprivate _glyphMarginDecorationLaneCount: number = 1;\n\tprivate _targetWindowId: number;\n\n\tprivate readonly _computeOptionsMemory: ComputeOptionsMemory = new ComputeOptionsMemory();\n\t/**\n\t * Raw options as they were passed in and merged with all calls to `updateOptions`.\n\t */\n\tprivate readonly _rawOptions: IEditorOptions;\n\t/**\n\t * Validated version of `_rawOptions`.\n\t */\n\tprivate _validatedOptions: ValidatedEditorOptions;\n\t/**\n\t * Complete options which are a combination of passed in options and env values.\n\t */\n\tpublic options: ComputedEditorOptions;\n\n\tconstructor(\n\t\tisSimpleWidget: boolean,\n\t\tcontextMenuId: MenuId,\n\t\toptions: Readonly<IEditorConstructionOptions>,\n\t\tcontainer: HTMLElement | null,\n\t\t@IAccessibilityService private readonly _accessibilityService: IAccessibilityService\n\t) {\n\t\tsuper();\n\t\tthis.isSimpleWidget = isSimpleWidget;\n\t\tthis.contextMenuId = contextMenuId;\n\t\tthis._containerObserver = this._register(new ElementSizeObserver(container, options.dimension));\n\t\tthis._targetWindowId = getWindow(container).vscodeWindowId;\n\n\t\tthis._rawOptions = deepCloneAndMigrateOptions(options);\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis.options = this._computeOptions();\n\n\t\tif (this.options.get(EditorOption.automaticLayout)) {\n\t\t\tthis._containerObserver.startObserving();\n\t\t}\n\n\t\tthis._register(EditorZoom.onDidChangeZoomLevel(() => this._recomputeOptions()));\n\t\tthis._register(TabFocus.onDidChangeTabFocus(() => this._recomputeOptions()));\n\t\tthis._register(this._containerObserver.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(FontMeasurements.onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(PixelRatio.getInstance(getWindow(container)).onDidChange(() => this._recomputeOptions()));\n\t\tthis._register(this._accessibilityService.onDidChangeScreenReaderOptimized(() => this._recomputeOptions()));\n\t\tthis._register(InputMode.onDidChangeInputMode(() => this._recomputeOptions()));\n\t}\n\n\tprivate _recomputeOptions(): void {\n\t\tconst newOptions = this._computeOptions();\n\t\tconst changeEvent = EditorOptionsUtil.checkEquals(this.options, newOptions);\n\t\tif (changeEvent === null) {\n\t\t\t// nothing changed!\n\t\t\treturn;\n\t\t}\n\n\t\tthis.options = newOptions;\n\t\tthis._onDidChangeFast.fire(changeEvent);\n\t\tthis._onDidChange.fire(changeEvent);\n\t}\n\n\tprivate _computeOptions(): ComputedEditorOptions {\n\t\tconst partialEnv = this._readEnvConfiguration();\n\t\tconst bareFontInfo = createBareFontInfoFromValidatedSettings(this._validatedOptions, partialEnv.pixelRatio, this.isSimpleWidget);\n\t\tconst fontInfo = this._readFontInfo(bareFontInfo);\n\t\tconst env: IEnvironmentalOptions = {\n\t\t\tmemory: this._computeOptionsMemory,\n\t\t\touterWidth: partialEnv.outerWidth,\n\t\t\touterHeight: partialEnv.outerHeight - this._reservedHeight,\n\t\t\tfontInfo: fontInfo,\n\t\t\textraEditorClassName: partialEnv.extraEditorClassName,\n\t\t\tisDominatedByLongLines: this._isDominatedByLongLines,\n\t\t\tviewLineCount: this._viewLineCount,\n\t\t\tlineNumbersDigitCount: this._lineNumbersDigitCount,\n\t\t\temptySelectionClipboard: partialEnv.emptySelectionClipboard,\n\t\t\tpixelRatio: partialEnv.pixelRatio,\n\t\t\ttabFocusMode: this._validatedOptions.get(EditorOption.tabFocusMode) || TabFocus.getTabFocusMode(),\n\t\t\tinputMode: InputMode.getInputMode(),\n\t\t\taccessibilitySupport: partialEnv.accessibilitySupport,\n\t\t\tglyphMarginDecorationLaneCount: this._glyphMarginDecorationLaneCount,\n\t\t\teditContextSupported: partialEnv.editContextSupported\n\t\t};\n\t\treturn EditorOptionsUtil.computeOptions(this._validatedOptions, env);\n\t}\n\n\tprotected _readEnvConfiguration(): IEnvConfiguration {\n\t\treturn {\n\t\t\textraEditorClassName: getExtraEditorClassName(),\n\t\t\touterWidth: this._containerObserver.getWidth(),\n\t\t\touterHeight: this._containerObserver.getHeight(),\n\t\t\temptySelectionClipboard: browser.isWebKit || browser.isFirefox,\n\t\t\tpixelRatio: PixelRatio.getInstance(getWindowById(this._targetWindowId, true).window).value,\n\t\t\t// eslint-disable-next-line local/code-no-any-casts, @typescript-eslint/no-explicit-any\n\t\t\teditContextSupported: typeof (globalThis as any).EditContext === 'function',\n\t\t\taccessibilitySupport: (\n\t\t\t\tthis._accessibilityService.isScreenReaderOptimized()\n\t\t\t\t\t? AccessibilitySupport.Enabled\n\t\t\t\t\t: this._accessibilityService.getAccessibilitySupport()\n\t\t\t)\n\t\t};\n\t}\n\n\tprotected _readFontInfo(bareFontInfo: BareFontInfo): FontInfo {\n\t\treturn FontMeasurements.readFontInfo(getWindowById(this._targetWindowId, true).window, bareFontInfo);\n\t}\n\n\tpublic getRawOptions(): IEditorOptions {\n\t\treturn this._rawOptions;\n\t}\n\n\tpublic updateOptions(_newOptions: Readonly<IEditorOptions>): void {\n\t\tconst newOptions = deepCloneAndMigrateOptions(_newOptions);\n\n\t\tconst didChange = EditorOptionsUtil.applyUpdate(this._rawOptions, newOptions);\n\t\tif (!didChange) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._validatedOptions = EditorOptionsUtil.validateOptions(this._rawOptions);\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic observeContainer(dimension?: IDimension): void {\n\t\tthis._containerObserver.observe(dimension);\n\t}\n\n\tpublic setIsDominatedByLongLines(isDominatedByLongLines: boolean): void {\n\t\tif (this._isDominatedByLongLines === isDominatedByLongLines) {\n\t\t\treturn;\n\t\t}\n\t\tthis._isDominatedByLongLines = isDominatedByLongLines;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setModelLineCount(modelLineCount: number): void {\n\t\tconst lineNumbersDigitCount = digitCount(modelLineCount);\n\t\tif (this._lineNumbersDigitCount === lineNumbersDigitCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._lineNumbersDigitCount = lineNumbersDigitCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setViewLineCount(viewLineCount: number): void {\n\t\tif (this._viewLineCount === viewLineCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._viewLineCount = viewLineCount;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setReservedHeight(reservedHeight: number) {\n\t\tif (this._reservedHeight === reservedHeight) {\n\t\t\treturn;\n\t\t}\n\t\tthis._reservedHeight = reservedHeight;\n\t\tthis._recomputeOptions();\n\t}\n\n\tpublic setGlyphMarginDecorationLaneCount(decorationLaneCount: number): void {\n\t\tif (this._glyphMarginDecorationLaneCount === decorationLaneCount) {\n\t\t\treturn;\n\t\t}\n\t\tthis._glyphMarginDecorationLaneCount = decorationLaneCount;\n\t\tthis._recomputeOptions();\n\t}\n}\n\nfunction digitCount(n: number): number {\n\tlet r = 0;\n\twhile (n) {\n\t\tn = Math.floor(n / 10);\n\t\tr++;\n\t}\n\treturn r ? r : 1;\n}\n\nfunction getExtraEditorClassName(): string {\n\tlet extra = '';\n\tif (browser.isSafari || browser.isWebkitWebView) {\n\t\t// See https://github.com/microsoft/vscode/issues/108822\n\t\textra += 'no-minimap-shadow ';\n\t\textra += 'enable-user-select ';\n\t} else {\n\t\t// Use user-select: none in all browsers except Safari and native macOS WebView\n\t\textra += 'no-user-select ';\n\t}\n\tif (platform.isMacintosh) {\n\t\textra += 'mac ';\n\t}\n\treturn extra;\n}\n\nexport interface IEnvConfiguration {\n\textraEditorClassName: string;\n\touterWidth: number;\n\touterHeight: number;\n\temptySelectionClipboard: boolean;\n\tpixelRatio: number;\n\taccessibilitySupport: AccessibilitySupport;\n\teditContextSupported: boolean;\n}\n\nclass ValidatedEditorOptions implements IValidatedEditorOptions {\n\tprivate readonly _values: unknown[] = [];\n\tpublic _read<T>(option: EditorOption): T {\n\t\treturn this._values[option] as T;\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._values[id] as FindComputedEditorOptionValueById<T>;\n\t}\n\tpublic _write<T>(option: EditorOption, value: T): void {\n\t\tthis._values[option] = value;\n\t}\n}\n\nexport class ComputedEditorOptions implements IComputedEditorOptions {\n\tprivate readonly _values: unknown[] = [];\n\tpublic _read<T>(id: EditorOption): T {\n\t\tif (id >= this._values.length) {\n\t\t\tthrow new Error('Cannot read uninitialized value');\n\t\t}\n\t\treturn this._values[id] as T;\n\t}\n\tpublic get<T extends EditorOption>(id: T): FindComputedEditorOptionValueById<T> {\n\t\treturn this._read(id);\n\t}\n\tpublic _write<T>(id: EditorOption, value: T): void {\n\t\tthis._values[id] = value;\n\t}\n}\n\nclass EditorOptionsUtil {\n\n\tpublic static validateOptions(options: IEditorOptions): ValidatedEditorOptions {\n\t\tconst result = new ValidatedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst value = (editorOption.name === '_never_' ? undefined : (options as Record<string, unknown>)[editorOption.name]);\n\t\t\tresult._write(editorOption.id, editorOption.validate(value));\n\t\t}\n\t\treturn result;\n\t}\n\n\tpublic static computeOptions(options: ValidatedEditorOptions, env: IEnvironmentalOptions): ComputedEditorOptions {\n\t\tconst result = new ComputedEditorOptions();\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tresult._write(editorOption.id, editorOption.compute(env, result, options._read(editorOption.id)));\n\t\t}\n\t\treturn result;\n\t}\n\n\tprivate static _deepEquals<T>(a: T, b: T): boolean {\n\t\tif (typeof a !== 'object' || typeof b !== 'object' || !a || !b) {\n\t\t\treturn a === b;\n\t\t}\n\t\tif (Array.isArray(a) || Array.isArray(b)) {\n\t\t\treturn (Array.isArray(a) && Array.isArray(b) ? arrays.equals(a, b) : false);\n\t\t}\n\t\tif (Object.keys(a as unknown as object).length !== Object.keys(b as unknown as object).length) {\n\t\t\treturn false;\n\t\t}\n\t\tfor (const key in a) {\n\t\t\tif (!EditorOptionsUtil._deepEquals(a[key], b[key])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tpublic static checkEquals(a: ComputedEditorOptions, b: ComputedEditorOptions): ConfigurationChangedEvent | null {\n\t\tconst result: boolean[] = [];\n\t\tlet somethingChanged = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tconst changed = !EditorOptionsUtil._deepEquals(a._read(editorOption.id), b._read(editorOption.id));\n\t\t\tresult[editorOption.id] = changed;\n\t\t\tif (changed) {\n\t\t\t\tsomethingChanged = true;\n\t\t\t}\n\t\t}\n\t\treturn (somethingChanged ? new ConfigurationChangedEvent(result) : null);\n\t}\n\n\t/**\n\t * Returns true if something changed.\n\t * Modifies `options`.\n\t*/\n\tpublic static applyUpdate(options: IEditorOptions, update: Readonly<IEditorOptions>): boolean {\n\t\tlet changed = false;\n\t\tfor (const editorOption of editorOptionsRegistry) {\n\t\t\tif (update.hasOwnProperty(editorOption.name)) {\n\t\t\t\tconst result = editorOption.applyUpdate((options as Record<string, unknown>)[editorOption.name], (update as Record<string, unknown>)[editorOption.name]);\n\t\t\t\t(options as Record<string, unknown>)[editorOption.name] = result.newValue;\n\t\t\t\tchanged = changed || result.didChange;\n\t\t\t}\n\t\t}\n\t\treturn changed;\n\t}\n}\n\nfunction deepCloneAndMigrateOptions(_options: Readonly<IEditorOptions>): IEditorOptions {\n\tconst options = objects.deepClone(_options);\n\tmigrateOptions(options);\n\treturn options;\n}\n"]}
@@ -15,7 +15,7 @@ export class EditorSettingMigration {
15
15
  this.migrate(value, read, write);
16
16
  }
17
17
  static _read(source, key) {
18
- if (typeof source === 'undefined') {
18
+ if (typeof source === 'undefined' || source === null) {
19
19
  return undefined;
20
20
  }
21
21
  const firstDotIndex = key.indexOf('.');