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

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 (251) 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 +7 -3
  28. package/esm/vs/base/browser/ui/tree/abstractTree.js.map +1 -1
  29. package/esm/vs/base/browser/ui/tree/asyncDataTree.js +4 -0
  30. package/esm/vs/base/browser/ui/tree/asyncDataTree.js.map +1 -1
  31. package/esm/vs/base/browser/ui/tree/indexTreeModel.js +1 -0
  32. package/esm/vs/base/browser/ui/tree/indexTreeModel.js.map +1 -1
  33. package/esm/vs/base/browser/ui/tree/media/tree.css +2 -2
  34. package/esm/vs/base/browser/webWorkerFactory.js +3 -0
  35. package/esm/vs/base/browser/webWorkerFactory.js.map +1 -1
  36. package/esm/vs/base/common/buffer.js.map +1 -1
  37. package/esm/vs/base/common/decorators.js +1 -0
  38. package/esm/vs/base/common/decorators.js.map +1 -1
  39. package/esm/vs/base/common/errors.js +1 -0
  40. package/esm/vs/base/common/errors.js.map +1 -1
  41. package/esm/vs/base/common/glob.js +1 -1
  42. package/esm/vs/base/common/glob.js.map +1 -1
  43. package/esm/vs/base/common/hash.js.map +1 -1
  44. package/esm/vs/base/common/hotReload.js +2 -0
  45. package/esm/vs/base/common/hotReload.js.map +1 -1
  46. package/esm/vs/base/common/hotReloadHelpers.js +1 -0
  47. package/esm/vs/base/common/hotReloadHelpers.js.map +1 -1
  48. package/esm/vs/base/common/lifecycle.js +19 -0
  49. package/esm/vs/base/common/lifecycle.js.map +1 -1
  50. package/esm/vs/base/common/map.js.map +1 -1
  51. package/esm/vs/base/common/marshalling.js +4 -0
  52. package/esm/vs/base/common/marshalling.js.map +1 -1
  53. package/esm/vs/base/common/network.js +1 -0
  54. package/esm/vs/base/common/network.js.map +1 -1
  55. package/esm/vs/base/common/objects.js +1 -0
  56. package/esm/vs/base/common/objects.js.map +1 -1
  57. package/esm/vs/base/common/observableInternal/changeTracker.js +4 -0
  58. package/esm/vs/base/common/observableInternal/changeTracker.js.map +1 -1
  59. package/esm/vs/base/common/observableInternal/debugLocation.js +1 -0
  60. package/esm/vs/base/common/observableInternal/debugLocation.js.map +1 -1
  61. package/esm/vs/base/common/observableInternal/debugName.js +1 -0
  62. package/esm/vs/base/common/observableInternal/debugName.js.map +1 -1
  63. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js +1 -0
  64. package/esm/vs/base/common/observableInternal/logging/consoleObservableLogger.js.map +1 -1
  65. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js +1 -0
  66. package/esm/vs/base/common/observableInternal/logging/debugger/debuggerRpc.js.map +1 -1
  67. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js +1 -0
  68. package/esm/vs/base/common/observableInternal/logging/debugger/rpc.js.map +1 -1
  69. package/esm/vs/base/common/observableInternal/observables/derived.js +7 -1
  70. package/esm/vs/base/common/observableInternal/observables/derived.js.map +1 -1
  71. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js +2 -0
  72. package/esm/vs/base/common/observableInternal/observables/derivedImpl.js.map +1 -1
  73. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js +1 -0
  74. package/esm/vs/base/common/observableInternal/observables/observableFromEvent.js.map +1 -1
  75. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js +1 -0
  76. package/esm/vs/base/common/observableInternal/reactions/autorunImpl.js.map +1 -1
  77. package/esm/vs/base/common/process.js +1 -0
  78. package/esm/vs/base/common/process.js.map +1 -1
  79. package/esm/vs/base/common/product.js.map +1 -1
  80. package/esm/vs/base/common/types.js +2 -0
  81. package/esm/vs/base/common/types.js.map +1 -1
  82. package/esm/vs/base/common/worker/webWorker.js +26 -14
  83. package/esm/vs/base/common/worker/webWorker.js.map +1 -1
  84. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js +2 -0
  85. package/esm/vs/base/parts/sandbox/common/sandboxTypes.js.map +1 -0
  86. package/esm/vs/editor/browser/config/editorConfiguration.js +3 -2
  87. package/esm/vs/editor/browser/config/editorConfiguration.js.map +1 -1
  88. package/esm/vs/editor/browser/config/migrateOptions.js +1 -1
  89. package/esm/vs/editor/browser/config/migrateOptions.js.map +1 -1
  90. package/esm/vs/editor/browser/controller/editContext/native/editContextFactory.js.map +1 -1
  91. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js +2 -0
  92. package/esm/vs/editor/browser/controller/editContext/native/nativeEditContextUtils.js.map +1 -1
  93. package/esm/vs/editor/browser/controller/mouseHandler.js +2 -1
  94. package/esm/vs/editor/browser/controller/mouseHandler.js.map +1 -1
  95. package/esm/vs/editor/browser/controller/mouseTarget.js +7 -0
  96. package/esm/vs/editor/browser/controller/mouseTarget.js.map +1 -1
  97. package/esm/vs/editor/browser/controller/pointerHandler.js.map +1 -1
  98. package/esm/vs/editor/browser/coreCommands.js.map +1 -1
  99. package/esm/vs/editor/browser/editorBrowser.js.map +1 -1
  100. package/esm/vs/editor/browser/editorDom.js.map +1 -1
  101. package/esm/vs/editor/browser/editorExtensions.js.map +1 -1
  102. package/esm/vs/editor/browser/gpu/gpuUtils.js +1 -0
  103. package/esm/vs/editor/browser/gpu/gpuUtils.js.map +1 -1
  104. package/esm/vs/editor/browser/gpu/viewGpuContext.js +1 -0
  105. package/esm/vs/editor/browser/gpu/viewGpuContext.js.map +1 -1
  106. package/esm/vs/editor/browser/services/abstractCodeEditorService.js.map +1 -1
  107. package/esm/vs/editor/browser/services/bulkEditService.js.map +1 -1
  108. package/esm/vs/editor/browser/services/codeEditorService.js.map +1 -1
  109. package/esm/vs/editor/browser/services/editorWorkerService.js.map +1 -1
  110. package/esm/vs/editor/browser/services/hoverService/hover.css +2 -0
  111. package/esm/vs/editor/browser/services/hoverService/hoverService.js.map +1 -1
  112. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js +1 -1
  113. package/esm/vs/editor/browser/services/hoverService/hoverWidget.js.map +1 -1
  114. package/esm/vs/editor/browser/services/inlineCompletionsService.js +8 -8
  115. package/esm/vs/editor/browser/services/inlineCompletionsService.js.map +1 -1
  116. package/esm/vs/editor/browser/services/openerService.js.map +1 -1
  117. package/esm/vs/editor/browser/view/viewLayer.js +1 -1
  118. package/esm/vs/editor/browser/view/viewLayer.js.map +1 -1
  119. package/esm/vs/editor/browser/view.js.map +1 -1
  120. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js +1 -0
  121. package/esm/vs/editor/browser/viewParts/contentWidgets/contentWidgets.js.map +1 -1
  122. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js +1 -0
  123. package/esm/vs/editor/browser/viewParts/viewZones/viewZones.js.map +1 -1
  124. package/esm/vs/editor/browser/widget/codeEditor/codeEditorContributions.js.map +1 -1
  125. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js +4 -1
  126. package/esm/vs/editor/browser/widget/codeEditor/codeEditorWidget.js.map +1 -1
  127. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js +1 -0
  128. package/esm/vs/editor/browser/widget/diffEditor/components/diffEditorEditors.js.map +1 -1
  129. package/esm/vs/editor/browser/widget/diffEditor/delegatingEditorImpl.js.map +1 -1
  130. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js +1 -0
  131. package/esm/vs/editor/browser/widget/diffEditor/diffEditorOptions.js.map +1 -1
  132. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js +1 -0
  133. package/esm/vs/editor/browser/widget/diffEditor/diffEditorWidget.js.map +1 -1
  134. package/esm/vs/editor/browser/widget/diffEditor/utils.js +2 -0
  135. package/esm/vs/editor/browser/widget/diffEditor/utils.js.map +1 -1
  136. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js +2 -0
  137. package/esm/vs/editor/browser/widget/multiDiffEditor/diffEditorItemTemplate.js.map +1 -1
  138. package/esm/vs/editor/common/config/editorOptions.js +122 -68
  139. package/esm/vs/editor/common/config/editorOptions.js.map +1 -1
  140. package/esm/vs/editor/common/config/fontInfo.js +32 -16
  141. package/esm/vs/editor/common/config/fontInfo.js.map +1 -1
  142. package/esm/vs/editor/common/config/fontInfoFromSettings.js +16 -0
  143. package/esm/vs/editor/common/config/fontInfoFromSettings.js.map +1 -0
  144. package/esm/vs/editor/common/core/edits/edit.js +1 -0
  145. package/esm/vs/editor/common/core/edits/edit.js.map +1 -1
  146. package/esm/vs/editor/common/core/edits/stringEdit.js +2 -0
  147. package/esm/vs/editor/common/core/edits/stringEdit.js.map +1 -1
  148. package/esm/vs/editor/common/core/position.js +1 -1
  149. package/esm/vs/editor/common/core/position.js.map +1 -1
  150. package/esm/vs/editor/common/core/range.js +1 -1
  151. package/esm/vs/editor/common/core/range.js.map +1 -1
  152. package/esm/vs/editor/common/core/selection.js +1 -1
  153. package/esm/vs/editor/common/core/selection.js.map +1 -1
  154. package/esm/vs/editor/common/cursor/cursorMoveCommands.js.map +1 -1
  155. package/esm/vs/editor/common/editorCommon.js.map +1 -1
  156. package/esm/vs/editor/common/languages.js +1 -1
  157. package/esm/vs/editor/common/languages.js.map +1 -1
  158. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js +14 -0
  159. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/length.js.map +1 -1
  160. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js +2 -0
  161. package/esm/vs/editor/common/model/bracketPairsTextModelPart/bracketPairsTree/smallImmutableSet.js.map +1 -1
  162. package/esm/vs/editor/common/model/textModel.js +1 -1
  163. package/esm/vs/editor/common/model/textModel.js.map +1 -1
  164. package/esm/vs/editor/common/model.js +1 -1
  165. package/esm/vs/editor/common/model.js.map +1 -1
  166. package/esm/vs/editor/common/services/editorBaseApi.js.map +1 -1
  167. package/esm/vs/editor/common/services/editorWebWorker.js +1 -0
  168. package/esm/vs/editor/common/services/editorWebWorker.js.map +1 -1
  169. package/esm/vs/editor/common/services/editorWorkerHost.js.map +1 -1
  170. package/esm/vs/editor/common/services/modelService.js +14 -21
  171. package/esm/vs/editor/common/services/modelService.js.map +1 -1
  172. package/esm/vs/editor/common/textModelEditSource.js +2 -0
  173. package/esm/vs/editor/common/textModelEditSource.js.map +1 -1
  174. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js +40 -1
  175. package/esm/vs/editor/common/viewLayout/viewLineRenderer.js.map +1 -1
  176. package/esm/vs/editor/common/viewModel/viewModelImpl.js +2 -1
  177. package/esm/vs/editor/common/viewModel/viewModelImpl.js.map +1 -1
  178. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js +1 -1
  179. package/esm/vs/editor/contrib/codeAction/browser/codeActionController.js.map +1 -1
  180. package/esm/vs/editor/contrib/codelens/browser/codelensController.js +1 -1
  181. package/esm/vs/editor/contrib/codelens/browser/codelensController.js.map +1 -1
  182. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js +1 -0
  183. package/esm/vs/editor/contrib/colorPicker/browser/colorDetector.js.map +1 -1
  184. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js +1 -0
  185. package/esm/vs/editor/contrib/contextmenu/browser/contextmenu.js.map +1 -1
  186. package/esm/vs/editor/contrib/find/browser/findModel.js +1 -0
  187. package/esm/vs/editor/contrib/find/browser/findModel.js.map +1 -1
  188. package/esm/vs/editor/contrib/find/browser/findWidget.css +5 -5
  189. package/esm/vs/editor/contrib/folding/browser/folding.css +4 -4
  190. package/esm/vs/editor/contrib/folding/browser/foldingDecorations.js.map +1 -1
  191. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js +1 -1
  192. package/esm/vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js.map +1 -1
  193. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js +30 -14
  194. package/esm/vs/editor/contrib/inlayHints/browser/inlayHintsController.js.map +1 -1
  195. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js +4 -3
  196. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsModel.js.map +1 -1
  197. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js +56 -7
  198. package/esm/vs/editor/contrib/inlineCompletions/browser/model/inlineCompletionsSource.js.map +1 -1
  199. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js +1 -0
  200. package/esm/vs/editor/contrib/inlineCompletions/browser/structuredLogger.js.map +1 -1
  201. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js +2 -0
  202. package/esm/vs/editor/contrib/inlineCompletions/browser/view/ghostText/ghostTextView.js.map +1 -1
  203. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js +1 -0
  204. package/esm/vs/editor/contrib/inlineCompletions/browser/view/inlineEdits/components/gutterIndicatorView.js.map +1 -1
  205. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js +1 -1
  206. package/esm/vs/editor/contrib/parameterHints/browser/parameterHintsWidget.js.map +1 -1
  207. package/esm/vs/editor/contrib/rename/browser/renameWidget.js.map +1 -1
  208. package/esm/vs/editor/contrib/symbolIcons/browser/symbolIcons.css +2 -0
  209. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js +2 -0
  210. package/esm/vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js.map +1 -1
  211. package/esm/vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js.map +1 -1
  212. package/esm/vs/editor/editor.api.d.ts +8 -8
  213. package/esm/vs/editor/editor.api.js +4 -0
  214. package/esm/vs/editor/editor.api.js.map +1 -1
  215. package/esm/vs/editor/standalone/browser/standaloneCodeEditor.js.map +1 -1
  216. package/esm/vs/editor/standalone/browser/standaloneEditor.js +37 -0
  217. package/esm/vs/editor/standalone/browser/standaloneEditor.js.map +1 -1
  218. package/esm/vs/editor/standalone/browser/standaloneLanguages.js +37 -0
  219. package/esm/vs/editor/standalone/browser/standaloneLanguages.js.map +1 -1
  220. package/esm/vs/editor/standalone/browser/standaloneServices.js.map +1 -1
  221. package/esm/vs/editor/standalone/browser/standaloneWebWorker.js.map +1 -1
  222. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js +3 -0
  223. package/esm/vs/editor/standalone/common/monarch/monarchCompile.js.map +1 -1
  224. package/esm/vs/platform/accessibility/browser/accessibilityService.js +2 -2
  225. package/esm/vs/platform/accessibility/browser/accessibilityService.js.map +1 -1
  226. package/esm/vs/platform/actions/common/actions.js.map +1 -1
  227. package/esm/vs/platform/commands/common/commands.js.map +1 -1
  228. package/esm/vs/platform/contextkey/common/contextkey.js +5 -0
  229. package/esm/vs/platform/contextkey/common/contextkey.js.map +1 -1
  230. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js +1 -0
  231. package/esm/vs/platform/dataChannel/browser/forwardingTelemetryService.js.map +1 -1
  232. package/esm/vs/platform/dnd/browser/dnd.js +2 -0
  233. package/esm/vs/platform/dnd/browser/dnd.js.map +1 -1
  234. package/esm/vs/platform/instantiation/common/descriptors.js.map +1 -1
  235. package/esm/vs/platform/instantiation/common/instantiation.js.map +1 -1
  236. package/esm/vs/platform/instantiation/common/instantiationService.js +1 -0
  237. package/esm/vs/platform/instantiation/common/instantiationService.js.map +1 -1
  238. package/esm/vs/platform/list/browser/listService.js +5 -0
  239. package/esm/vs/platform/list/browser/listService.js.map +1 -1
  240. package/esm/vs/platform/log/common/log.js.map +1 -1
  241. package/esm/vs/platform/log/common/logService.js.map +1 -1
  242. package/esm/vs/platform/observable/common/wrapInHotClass.js +2 -0
  243. package/esm/vs/platform/observable/common/wrapInHotClass.js.map +1 -1
  244. package/esm/vs/platform/observable/common/wrapInReloadableClass.js +3 -0
  245. package/esm/vs/platform/observable/common/wrapInReloadableClass.js.map +1 -1
  246. package/esm/vs/platform/product/common/product.js +69 -0
  247. package/esm/vs/platform/product/common/product.js.map +1 -0
  248. package/esm/vs/platform/quickinput/browser/quickInput.js +1 -1
  249. package/esm/vs/platform/quickinput/browser/quickInput.js.map +1 -1
  250. package/monaco.d.ts +8 -8
  251. 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/observableInternal/observables/derivedImpl.ts","vs/base/common/observableInternal/observables/derivedImpl.ts"],"names":[],"mappings":"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","file":"derivedImpl.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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore, ISettableObservable, ITransaction } from '../base.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugNameData } from '../debugName.js';\nimport { BugIndicatingError, DisposableStore, EqualityComparer, assertFn, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport interface IDerivedReader<TChange = void> extends IReaderWithStore {\n}\n\nexport const enum DerivedState {\n\t/** Initial state, no previous value, recomputation needed */\n\tinitial = 0,\n\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t * After recomputation, we need to check the previous value to see if we changed as well.\n\t */\n\tstale = 2,\n\n\t/**\n\t * No change reported, our cached value is up to date.\n\t */\n\tupToDate = 3,\n}\n\nfunction derivedStateToString(state: DerivedState): string {\n\tswitch (state) {\n\t\tcase DerivedState.initial: return 'initial';\n\t\tcase DerivedState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase DerivedState.stale: return 'stale';\n\t\tcase DerivedState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class Derived<T, TChangeSummary = any, TChange = void> extends BaseObservable<T, TChange> implements IDerivedReader<TChange>, IObserver {\n\tprivate _state = DerivedState.initial;\n\tprivate _value: T | undefined = undefined;\n\tprivate _updateCount = 0;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined = undefined;\n\tprivate _isUpdating = false;\n\tprivate _isComputing = false;\n\tprivate _didReportChange = false;\n\tprivate _isInBeforeUpdate = false;\n\tprivate _isReaderValid = false;\n\tprivate _store: DisposableStore | undefined = undefined;\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\tprivate _removedObserverToCallEndUpdateOn: Set<IObserver> | null = null;\n\n\tpublic override get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _computeFn: (reader: IDerivedReader<TChange>, changeSummary: TChangeSummary) => T,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tprivate readonly _handleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(debugLocation);\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t}\n\n\tprotected override onLastObserverRemoved(): void {\n\t\t/**\n\t\t * We are not tracking changes anymore, thus we have to assume\n\t\t * that our cache is invalid.\n\t\t */\n\t\tthis._state = DerivedState.initial;\n\t\tthis._value = undefined;\n\t\tgetLogger()?.handleDerivedCleared(this);\n\t\tfor (const d of this._dependencies) {\n\t\t\td.removeObserver(this);\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t\tthis._store = undefined;\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t\tthis._delayedStore = undefined;\n\t\t}\n\n\t\tthis._handleLastObserverRemoved?.();\n\t}\n\n\tpublic override get(): T {\n\t\tconst checkEnabled = false; // TODO set to true\n\t\tif (this._isComputing && checkEnabled) {\n\t\t\t// investigate why this fails in the diff editor!\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tif (this._observers.size === 0) {\n\t\t\tlet result;\n\t\t\t// Without observers, we don't know when to clean up stuff.\n\t\t\t// Thus, we don't cache anything to prevent memory leaks.\n\t\t\ttry {\n\t\t\t\tthis._isReaderValid = true;\n\t\t\t\tlet changeSummary = undefined;\n\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\tchangeSummary = this._changeTracker.createChangeSummary(undefined);\n\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t}\n\t\t\t\tresult = this._computeFn(this, changeSummary!);\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t}\n\t\t\t// Clear new dependencies\n\t\t\tthis.onLastObserverRemoved();\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\tdo {\n\t\t\t\t// We might not get a notification for a dependency that changed while it is updating,\n\t\t\t\t// thus we also have to ask all our depedencies if they changed in this case.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t/** might call {@link handleChange} indirectly, which could make us stale */\n\t\t\t\t\t\td.reportChanges();\n\n\t\t\t\t\t\tif (this._state as DerivedState === DerivedState.stale) {\n\t\t\t\t\t\t\t// The other dependencies will refresh on demand, so early break\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// We called report changes of all dependencies.\n\t\t\t\t// If we are still not stale, we can assume to be up to date again.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tthis._state = DerivedState.upToDate;\n\t\t\t\t}\n\n\t\t\t\tif (this._state !== DerivedState.upToDate) {\n\t\t\t\t\tthis._recompute();\n\t\t\t\t}\n\t\t\t\t// In case recomputation changed one of our dependencies, we need to recompute again.\n\t\t\t} while (this._state !== DerivedState.upToDate);\n\t\t\treturn this._value!;\n\t\t}\n\t}\n\n\tprivate _recompute() {\n\t\tlet didChange = false;\n\t\tthis._isComputing = true;\n\t\tthis._didReportChange = false;\n\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\ttry {\n\t\t\tconst changeSummary = this._changeSummary!;\n\n\t\t\tthis._isReaderValid = true;\n\t\t\tif (this._changeTracker) {\n\t\t\t\tthis._isInBeforeUpdate = true;\n\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\tthis._isInBeforeUpdate = false;\n\t\t\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n\t\t\t}\n\n\t\t\tconst hadValue = this._state !== DerivedState.initial;\n\t\t\tconst oldValue = this._value;\n\t\t\tthis._state = DerivedState.upToDate;\n\n\t\t\tconst delayedStore = this._delayedStore;\n\t\t\tif (delayedStore !== undefined) {\n\t\t\t\tthis._delayedStore = undefined;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\tthis._store = undefined;\n\t\t\t\t}\n\t\t\t\t/** might call {@link handleChange} indirectly, which could invalidate us */\n\t\t\t\tthis._value = this._computeFn(this, changeSummary);\n\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\t\to.removeObserver(this);\n\t\t\t\t}\n\t\t\t\tthis._dependenciesToBeRemoved.clear();\n\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdidChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue!, this._value)));\n\n\t\t\tgetLogger()?.handleObservableUpdated(this, {\n\t\t\t\toldValue,\n\t\t\t\tnewValue: this._value,\n\t\t\t\tchange: undefined,\n\t\t\t\tdidChange,\n\t\t\t\thadValue,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tonBugIndicatingError(e);\n\t\t}\n\n\t\tthis._isComputing = false;\n\n\t\tif (!this._didReportChange && didChange) {\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handleChange(this, undefined);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._didReportChange = false;\n\t\t}\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `LazyDerived<${this.debugName}>`;\n\t}\n\n\t// IObserver Implementation\n\n\tpublic beginUpdate<T>(_observable: IObservable<T>): void {\n\t\tif (this._isUpdating) {\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tthis._updateCount++;\n\t\tthis._isUpdating = true;\n\t\ttry {\n\t\t\tconst propagateBeginUpdate = this._updateCount === 1;\n\t\t\tif (this._state === DerivedState.upToDate) {\n\t\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\t\t// If we propagate begin update, that will already signal a possible change.\n\t\t\t\tif (!propagateBeginUpdate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (propagateBeginUpdate) {\n\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\tr.beginUpdate(this); // This signals a possible change\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isUpdating = false;\n\t\t}\n\t}\n\n\tpublic endUpdate<T>(_observable: IObservable<T>): void {\n\t\tthis._updateCount--;\n\t\tif (this._updateCount === 0) {\n\t\t\t// End update could change the observer list.\n\t\t\tconst observers = [...this._observers];\n\t\t\tfor (const r of observers) {\n\t\t\t\tr.endUpdate(this);\n\t\t\t}\n\t\t\tif (this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tconst observers = [...this._removedObserverToCallEndUpdateOn];\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = null;\n\t\t\t\tfor (const r of observers) {\n\t\t\t\t\tr.endUpdate(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange<T>(observable: IObservable<T>): void {\n\t\t// In all other states, observers already know that we might have changed.\n\t\tif (this._state === DerivedState.upToDate && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handlePossibleChange(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n\t\t\tgetLogger()?.handleDerivedDependencyChanged(this, observable, change);\n\n\t\t\tlet shouldReact = false;\n\t\t\ttry {\n\t\t\t\tshouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\n\t\t\tconst wasUpToDate = this._state === DerivedState.upToDate;\n\t\t\tif (shouldReact && (this._state === DerivedState.dependenciesMightHaveChanged || wasUpToDate)) {\n\t\t\t\tthis._state = DerivedState.stale;\n\t\t\t\tif (wasUpToDate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IReader Implementation\n\n\tprivate _ensureReaderValid(): void {\n\t\tif (!this._isReaderValid) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureReaderValid();\n\n\t\t// Subscribe before getting the value to enable caching\n\t\tobservable.addObserver(this);\n\t\t/** This might call {@link handleChange} indirectly, which could invalidate us */\n\t\tconst value = observable.get();\n\t\t// Which is why we only add the observable to the dependencies now.\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tget store(): DisposableStore {\n\t\tthis._ensureReaderValid();\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tpublic override addObserver(observer: IObserver): void {\n\t\tconst shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n\t\tsuper.addObserver(observer);\n\n\t\tif (shouldCallBeginUpdate) {\n\t\t\tif (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn.delete(observer);\n\t\t\t} else {\n\t\t\t\tobserver.beginUpdate(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override removeObserver(observer: IObserver): void {\n\t\tif (this._observers.has(observer) && this._updateCount > 0) {\n\t\t\tif (!this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = new Set();\n\t\t\t}\n\t\t\tthis._removedObserverToCallEndUpdateOn.add(observer);\n\t\t}\n\t\tsuper.removeObserver(observer);\n\t}\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tstate: this._state,\n\t\t\tstateStr: derivedStateToString(this._state),\n\t\t\tupdateCount: this._updateCount,\n\t\t\tisComputing: this._isComputing,\n\t\t\tdependencies: this._dependencies,\n\t\t\tvalue: this._value,\n\t\t};\n\t}\n\n\tpublic debugSetValue(newValue: unknown) {\n\t\tthis._value = newValue as any;\n\t}\n\n\tpublic debugRecompute(): void {\n\t\tif (!this._isComputing) {\n\t\t\tthis._recompute();\n\t\t} else {\n\t\t\tthis._state = DerivedState.stale;\n\t\t}\n\t}\n\n\tpublic setValue(newValue: T, tx: ITransaction, change: TChange): void {\n\t\tthis._value = newValue;\n\t\tconst observers = this._observers;\n\t\ttx.updateObserver(this, this);\n\t\tfor (const d of observers) {\n\t\t\td.handleChange(this, change);\n\t\t}\n\t}\n}\n\n\nexport class DerivedWithSetter<T, TChangeSummary = any, TOutChanges = any> extends Derived<T, TChangeSummary, TOutChanges> implements ISettableObservable<T, TOutChanges> {\n\tconstructor(\n\t\tdebugNameData: DebugNameData,\n\t\tcomputeFn: (reader: IDerivedReader<TOutChanges>, changeSummary: TChangeSummary) => T,\n\t\tchangeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\thandleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tequalityComparator: EqualityComparer<T>,\n\t\tpublic readonly set: (value: T, tx: ITransaction | undefined, change: TOutChanges) => void,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(\n\t\t\tdebugNameData,\n\t\t\tcomputeFn,\n\t\t\tchangeTracker,\n\t\t\thandleLastObserverRemoved,\n\t\t\tequalityComparator,\n\t\t\tdebugLocation,\n\t\t);\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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore, ISettableObservable, ITransaction } from '../base.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugNameData } from '../debugName.js';\nimport { BugIndicatingError, DisposableStore, EqualityComparer, assertFn, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport interface IDerivedReader<TChange = void> extends IReaderWithStore {\n}\n\nexport const enum DerivedState {\n\t/** Initial state, no previous value, recomputation needed */\n\tinitial = 0,\n\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t * After recomputation, we need to check the previous value to see if we changed as well.\n\t */\n\tstale = 2,\n\n\t/**\n\t * No change reported, our cached value is up to date.\n\t */\n\tupToDate = 3,\n}\n\nfunction derivedStateToString(state: DerivedState): string {\n\tswitch (state) {\n\t\tcase DerivedState.initial: return 'initial';\n\t\tcase DerivedState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase DerivedState.stale: return 'stale';\n\t\tcase DerivedState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class Derived<T, TChangeSummary = any, TChange = void> extends BaseObservable<T, TChange> implements IDerivedReader<TChange>, IObserver {\n\tprivate _state = DerivedState.initial;\n\tprivate _value: T | undefined = undefined;\n\tprivate _updateCount = 0;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined = undefined;\n\tprivate _isUpdating = false;\n\tprivate _isComputing = false;\n\tprivate _didReportChange = false;\n\tprivate _isInBeforeUpdate = false;\n\tprivate _isReaderValid = false;\n\tprivate _store: DisposableStore | undefined = undefined;\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\tprivate _removedObserverToCallEndUpdateOn: Set<IObserver> | null = null;\n\n\tpublic override get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _computeFn: (reader: IDerivedReader<TChange>, changeSummary: TChangeSummary) => T,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tprivate readonly _handleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(debugLocation);\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t}\n\n\tprotected override onLastObserverRemoved(): void {\n\t\t/**\n\t\t * We are not tracking changes anymore, thus we have to assume\n\t\t * that our cache is invalid.\n\t\t */\n\t\tthis._state = DerivedState.initial;\n\t\tthis._value = undefined;\n\t\tgetLogger()?.handleDerivedCleared(this);\n\t\tfor (const d of this._dependencies) {\n\t\t\td.removeObserver(this);\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t\tthis._store = undefined;\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t\tthis._delayedStore = undefined;\n\t\t}\n\n\t\tthis._handleLastObserverRemoved?.();\n\t}\n\n\tpublic override get(): T {\n\t\tconst checkEnabled = false; // TODO set to true\n\t\tif (this._isComputing && checkEnabled) {\n\t\t\t// investigate why this fails in the diff editor!\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tif (this._observers.size === 0) {\n\t\t\tlet result;\n\t\t\t// Without observers, we don't know when to clean up stuff.\n\t\t\t// Thus, we don't cache anything to prevent memory leaks.\n\t\t\ttry {\n\t\t\t\tthis._isReaderValid = true;\n\t\t\t\tlet changeSummary = undefined;\n\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\tchangeSummary = this._changeTracker.createChangeSummary(undefined);\n\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t}\n\t\t\t\tresult = this._computeFn(this, changeSummary!);\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t}\n\t\t\t// Clear new dependencies\n\t\t\tthis.onLastObserverRemoved();\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\tdo {\n\t\t\t\t// We might not get a notification for a dependency that changed while it is updating,\n\t\t\t\t// thus we also have to ask all our depedencies if they changed in this case.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t/** might call {@link handleChange} indirectly, which could make us stale */\n\t\t\t\t\t\td.reportChanges();\n\n\t\t\t\t\t\tif (this._state as DerivedState === DerivedState.stale) {\n\t\t\t\t\t\t\t// The other dependencies will refresh on demand, so early break\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// We called report changes of all dependencies.\n\t\t\t\t// If we are still not stale, we can assume to be up to date again.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tthis._state = DerivedState.upToDate;\n\t\t\t\t}\n\n\t\t\t\tif (this._state !== DerivedState.upToDate) {\n\t\t\t\t\tthis._recompute();\n\t\t\t\t}\n\t\t\t\t// In case recomputation changed one of our dependencies, we need to recompute again.\n\t\t\t} while (this._state !== DerivedState.upToDate);\n\t\t\treturn this._value!;\n\t\t}\n\t}\n\n\tprivate _recompute() {\n\t\tlet didChange = false;\n\t\tthis._isComputing = true;\n\t\tthis._didReportChange = false;\n\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\ttry {\n\t\t\tconst changeSummary = this._changeSummary!;\n\n\t\t\tthis._isReaderValid = true;\n\t\t\tif (this._changeTracker) {\n\t\t\t\tthis._isInBeforeUpdate = true;\n\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\tthis._isInBeforeUpdate = false;\n\t\t\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n\t\t\t}\n\n\t\t\tconst hadValue = this._state !== DerivedState.initial;\n\t\t\tconst oldValue = this._value;\n\t\t\tthis._state = DerivedState.upToDate;\n\n\t\t\tconst delayedStore = this._delayedStore;\n\t\t\tif (delayedStore !== undefined) {\n\t\t\t\tthis._delayedStore = undefined;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\tthis._store = undefined;\n\t\t\t\t}\n\t\t\t\t/** might call {@link handleChange} indirectly, which could invalidate us */\n\t\t\t\tthis._value = this._computeFn(this, changeSummary);\n\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\t\to.removeObserver(this);\n\t\t\t\t}\n\t\t\t\tthis._dependenciesToBeRemoved.clear();\n\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdidChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue!, this._value)));\n\n\t\t\tgetLogger()?.handleObservableUpdated(this, {\n\t\t\t\toldValue,\n\t\t\t\tnewValue: this._value,\n\t\t\t\tchange: undefined,\n\t\t\t\tdidChange,\n\t\t\t\thadValue,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tonBugIndicatingError(e);\n\t\t}\n\n\t\tthis._isComputing = false;\n\n\t\tif (!this._didReportChange && didChange) {\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handleChange(this, undefined);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._didReportChange = false;\n\t\t}\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `LazyDerived<${this.debugName}>`;\n\t}\n\n\t// IObserver Implementation\n\n\tpublic beginUpdate<T>(_observable: IObservable<T>): void {\n\t\tif (this._isUpdating) {\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tthis._updateCount++;\n\t\tthis._isUpdating = true;\n\t\ttry {\n\t\t\tconst propagateBeginUpdate = this._updateCount === 1;\n\t\t\tif (this._state === DerivedState.upToDate) {\n\t\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\t\t// If we propagate begin update, that will already signal a possible change.\n\t\t\t\tif (!propagateBeginUpdate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (propagateBeginUpdate) {\n\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\tr.beginUpdate(this); // This signals a possible change\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isUpdating = false;\n\t\t}\n\t}\n\n\tpublic endUpdate<T>(_observable: IObservable<T>): void {\n\t\tthis._updateCount--;\n\t\tif (this._updateCount === 0) {\n\t\t\t// End update could change the observer list.\n\t\t\tconst observers = [...this._observers];\n\t\t\tfor (const r of observers) {\n\t\t\t\tr.endUpdate(this);\n\t\t\t}\n\t\t\tif (this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tconst observers = [...this._removedObserverToCallEndUpdateOn];\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = null;\n\t\t\t\tfor (const r of observers) {\n\t\t\t\t\tr.endUpdate(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange<T>(observable: IObservable<T>): void {\n\t\t// In all other states, observers already know that we might have changed.\n\t\tif (this._state === DerivedState.upToDate && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handlePossibleChange(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n\t\t\tgetLogger()?.handleDerivedDependencyChanged(this, observable, change);\n\n\t\t\tlet shouldReact = false;\n\t\t\ttry {\n\t\t\t\tshouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\n\t\t\tconst wasUpToDate = this._state === DerivedState.upToDate;\n\t\t\tif (shouldReact && (this._state === DerivedState.dependenciesMightHaveChanged || wasUpToDate)) {\n\t\t\t\tthis._state = DerivedState.stale;\n\t\t\t\tif (wasUpToDate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IReader Implementation\n\n\tprivate _ensureReaderValid(): void {\n\t\tif (!this._isReaderValid) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureReaderValid();\n\n\t\t// Subscribe before getting the value to enable caching\n\t\tobservable.addObserver(this);\n\t\t/** This might call {@link handleChange} indirectly, which could invalidate us */\n\t\tconst value = observable.get();\n\t\t// Which is why we only add the observable to the dependencies now.\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tget store(): DisposableStore {\n\t\tthis._ensureReaderValid();\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tpublic override addObserver(observer: IObserver): void {\n\t\tconst shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n\t\tsuper.addObserver(observer);\n\n\t\tif (shouldCallBeginUpdate) {\n\t\t\tif (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn.delete(observer);\n\t\t\t} else {\n\t\t\t\tobserver.beginUpdate(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override removeObserver(observer: IObserver): void {\n\t\tif (this._observers.has(observer) && this._updateCount > 0) {\n\t\t\tif (!this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = new Set();\n\t\t\t}\n\t\t\tthis._removedObserverToCallEndUpdateOn.add(observer);\n\t\t}\n\t\tsuper.removeObserver(observer);\n\t}\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tstate: this._state,\n\t\t\tstateStr: derivedStateToString(this._state),\n\t\t\tupdateCount: this._updateCount,\n\t\t\tisComputing: this._isComputing,\n\t\t\tdependencies: this._dependencies,\n\t\t\tvalue: this._value,\n\t\t};\n\t}\n\n\tpublic debugSetValue(newValue: unknown) {\n\t\tthis._value = newValue as any;\n\t}\n\n\tpublic debugRecompute(): void {\n\t\tif (!this._isComputing) {\n\t\t\tthis._recompute();\n\t\t} else {\n\t\t\tthis._state = DerivedState.stale;\n\t\t}\n\t}\n\n\tpublic setValue(newValue: T, tx: ITransaction, change: TChange): void {\n\t\tthis._value = newValue;\n\t\tconst observers = this._observers;\n\t\ttx.updateObserver(this, this);\n\t\tfor (const d of observers) {\n\t\t\td.handleChange(this, change);\n\t\t}\n\t}\n}\n\n\nexport class DerivedWithSetter<T, TChangeSummary = any, TOutChanges = any> extends Derived<T, TChangeSummary, TOutChanges> implements ISettableObservable<T, TOutChanges> {\n\tconstructor(\n\t\tdebugNameData: DebugNameData,\n\t\tcomputeFn: (reader: IDerivedReader<TOutChanges>, changeSummary: TChangeSummary) => T,\n\t\tchangeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\thandleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tequalityComparator: EqualityComparer<T>,\n\t\tpublic readonly set: (value: T, tx: ITransaction | undefined, change: TOutChanges) => void,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(\n\t\t\tdebugNameData,\n\t\t\tcomputeFn,\n\t\t\tchangeTracker,\n\t\t\thandleLastObserverRemoved,\n\t\t\tequalityComparator,\n\t\t\tdebugLocation,\n\t\t);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/observableInternal/observables/derivedImpl.ts","vs/base/common/observableInternal/observables/derivedImpl.ts"],"names":[],"mappings":"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","file":"derivedImpl.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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore, ISettableObservable, ITransaction } from '../base.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugNameData } from '../debugName.js';\nimport { BugIndicatingError, DisposableStore, EqualityComparer, assertFn, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport interface IDerivedReader<TChange = void> extends IReaderWithStore {\n}\n\nexport const enum DerivedState {\n\t/** Initial state, no previous value, recomputation needed */\n\tinitial = 0,\n\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t * After recomputation, we need to check the previous value to see if we changed as well.\n\t */\n\tstale = 2,\n\n\t/**\n\t * No change reported, our cached value is up to date.\n\t */\n\tupToDate = 3,\n}\n\nfunction derivedStateToString(state: DerivedState): string {\n\tswitch (state) {\n\t\tcase DerivedState.initial: return 'initial';\n\t\tcase DerivedState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase DerivedState.stale: return 'stale';\n\t\tcase DerivedState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class Derived<T, TChangeSummary = any, TChange = void> extends BaseObservable<T, TChange> implements IDerivedReader<TChange>, IObserver {\n\tprivate _state = DerivedState.initial;\n\tprivate _value: T | undefined = undefined;\n\tprivate _updateCount = 0;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined = undefined;\n\tprivate _isUpdating = false;\n\tprivate _isComputing = false;\n\tprivate _didReportChange = false;\n\tprivate _isInBeforeUpdate = false;\n\tprivate _isReaderValid = false;\n\tprivate _store: DisposableStore | undefined = undefined;\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\tprivate _removedObserverToCallEndUpdateOn: Set<IObserver> | null = null;\n\n\tpublic override get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _computeFn: (reader: IDerivedReader<TChange>, changeSummary: TChangeSummary) => T,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tprivate readonly _handleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(debugLocation);\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t}\n\n\tprotected override onLastObserverRemoved(): void {\n\t\t/**\n\t\t * We are not tracking changes anymore, thus we have to assume\n\t\t * that our cache is invalid.\n\t\t */\n\t\tthis._state = DerivedState.initial;\n\t\tthis._value = undefined;\n\t\tgetLogger()?.handleDerivedCleared(this);\n\t\tfor (const d of this._dependencies) {\n\t\t\td.removeObserver(this);\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t\tthis._store = undefined;\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t\tthis._delayedStore = undefined;\n\t\t}\n\n\t\tthis._handleLastObserverRemoved?.();\n\t}\n\n\tpublic override get(): T {\n\t\tconst checkEnabled = false; // TODO set to true\n\t\tif (this._isComputing && checkEnabled) {\n\t\t\t// investigate why this fails in the diff editor!\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tif (this._observers.size === 0) {\n\t\t\tlet result;\n\t\t\t// Without observers, we don't know when to clean up stuff.\n\t\t\t// Thus, we don't cache anything to prevent memory leaks.\n\t\t\ttry {\n\t\t\t\tthis._isReaderValid = true;\n\t\t\t\tlet changeSummary = undefined;\n\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\tchangeSummary = this._changeTracker.createChangeSummary(undefined);\n\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t}\n\t\t\t\tresult = this._computeFn(this, changeSummary!);\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t}\n\t\t\t// Clear new dependencies\n\t\t\tthis.onLastObserverRemoved();\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\tdo {\n\t\t\t\t// We might not get a notification for a dependency that changed while it is updating,\n\t\t\t\t// thus we also have to ask all our depedencies if they changed in this case.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t/** might call {@link handleChange} indirectly, which could make us stale */\n\t\t\t\t\t\td.reportChanges();\n\n\t\t\t\t\t\tif (this._state as DerivedState === DerivedState.stale) {\n\t\t\t\t\t\t\t// The other dependencies will refresh on demand, so early break\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// We called report changes of all dependencies.\n\t\t\t\t// If we are still not stale, we can assume to be up to date again.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tthis._state = DerivedState.upToDate;\n\t\t\t\t}\n\n\t\t\t\tif (this._state !== DerivedState.upToDate) {\n\t\t\t\t\tthis._recompute();\n\t\t\t\t}\n\t\t\t\t// In case recomputation changed one of our dependencies, we need to recompute again.\n\t\t\t} while (this._state !== DerivedState.upToDate);\n\t\t\treturn this._value!;\n\t\t}\n\t}\n\n\tprivate _recompute() {\n\t\tlet didChange = false;\n\t\tthis._isComputing = true;\n\t\tthis._didReportChange = false;\n\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\ttry {\n\t\t\tconst changeSummary = this._changeSummary!;\n\n\t\t\tthis._isReaderValid = true;\n\t\t\tif (this._changeTracker) {\n\t\t\t\tthis._isInBeforeUpdate = true;\n\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\tthis._isInBeforeUpdate = false;\n\t\t\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n\t\t\t}\n\n\t\t\tconst hadValue = this._state !== DerivedState.initial;\n\t\t\tconst oldValue = this._value;\n\t\t\tthis._state = DerivedState.upToDate;\n\n\t\t\tconst delayedStore = this._delayedStore;\n\t\t\tif (delayedStore !== undefined) {\n\t\t\t\tthis._delayedStore = undefined;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\tthis._store = undefined;\n\t\t\t\t}\n\t\t\t\t/** might call {@link handleChange} indirectly, which could invalidate us */\n\t\t\t\tthis._value = this._computeFn(this, changeSummary);\n\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\t\to.removeObserver(this);\n\t\t\t\t}\n\t\t\t\tthis._dependenciesToBeRemoved.clear();\n\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdidChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue!, this._value)));\n\n\t\t\tgetLogger()?.handleObservableUpdated(this, {\n\t\t\t\toldValue,\n\t\t\t\tnewValue: this._value,\n\t\t\t\tchange: undefined,\n\t\t\t\tdidChange,\n\t\t\t\thadValue,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tonBugIndicatingError(e);\n\t\t}\n\n\t\tthis._isComputing = false;\n\n\t\tif (!this._didReportChange && didChange) {\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handleChange(this, undefined);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._didReportChange = false;\n\t\t}\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `LazyDerived<${this.debugName}>`;\n\t}\n\n\t// IObserver Implementation\n\n\tpublic beginUpdate<T>(_observable: IObservable<T>): void {\n\t\tif (this._isUpdating) {\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tthis._updateCount++;\n\t\tthis._isUpdating = true;\n\t\ttry {\n\t\t\tconst propagateBeginUpdate = this._updateCount === 1;\n\t\t\tif (this._state === DerivedState.upToDate) {\n\t\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\t\t// If we propagate begin update, that will already signal a possible change.\n\t\t\t\tif (!propagateBeginUpdate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (propagateBeginUpdate) {\n\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\tr.beginUpdate(this); // This signals a possible change\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isUpdating = false;\n\t\t}\n\t}\n\n\tpublic endUpdate<T>(_observable: IObservable<T>): void {\n\t\tthis._updateCount--;\n\t\tif (this._updateCount === 0) {\n\t\t\t// End update could change the observer list.\n\t\t\tconst observers = [...this._observers];\n\t\t\tfor (const r of observers) {\n\t\t\t\tr.endUpdate(this);\n\t\t\t}\n\t\t\tif (this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tconst observers = [...this._removedObserverToCallEndUpdateOn];\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = null;\n\t\t\t\tfor (const r of observers) {\n\t\t\t\t\tr.endUpdate(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange<T>(observable: IObservable<T>): void {\n\t\t// In all other states, observers already know that we might have changed.\n\t\tif (this._state === DerivedState.upToDate && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handlePossibleChange(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n\t\t\tgetLogger()?.handleDerivedDependencyChanged(this, observable, change);\n\n\t\t\tlet shouldReact = false;\n\t\t\ttry {\n\t\t\t\tshouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\n\t\t\tconst wasUpToDate = this._state === DerivedState.upToDate;\n\t\t\tif (shouldReact && (this._state === DerivedState.dependenciesMightHaveChanged || wasUpToDate)) {\n\t\t\t\tthis._state = DerivedState.stale;\n\t\t\t\tif (wasUpToDate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IReader Implementation\n\n\tprivate _ensureReaderValid(): void {\n\t\tif (!this._isReaderValid) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureReaderValid();\n\n\t\t// Subscribe before getting the value to enable caching\n\t\tobservable.addObserver(this);\n\t\t/** This might call {@link handleChange} indirectly, which could invalidate us */\n\t\tconst value = observable.get();\n\t\t// Which is why we only add the observable to the dependencies now.\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tget store(): DisposableStore {\n\t\tthis._ensureReaderValid();\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tpublic override addObserver(observer: IObserver): void {\n\t\tconst shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n\t\tsuper.addObserver(observer);\n\n\t\tif (shouldCallBeginUpdate) {\n\t\t\tif (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn.delete(observer);\n\t\t\t} else {\n\t\t\t\tobserver.beginUpdate(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override removeObserver(observer: IObserver): void {\n\t\tif (this._observers.has(observer) && this._updateCount > 0) {\n\t\t\tif (!this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = new Set();\n\t\t\t}\n\t\t\tthis._removedObserverToCallEndUpdateOn.add(observer);\n\t\t}\n\t\tsuper.removeObserver(observer);\n\t}\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tstate: this._state,\n\t\t\tstateStr: derivedStateToString(this._state),\n\t\t\tupdateCount: this._updateCount,\n\t\t\tisComputing: this._isComputing,\n\t\t\tdependencies: this._dependencies,\n\t\t\tvalue: this._value,\n\t\t};\n\t}\n\n\tpublic debugSetValue(newValue: unknown) {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tthis._value = newValue as any;\n\t}\n\n\tpublic debugRecompute(): void {\n\t\tif (!this._isComputing) {\n\t\t\tthis._recompute();\n\t\t} else {\n\t\t\tthis._state = DerivedState.stale;\n\t\t}\n\t}\n\n\tpublic setValue(newValue: T, tx: ITransaction, change: TChange): void {\n\t\tthis._value = newValue;\n\t\tconst observers = this._observers;\n\t\ttx.updateObserver(this, this);\n\t\tfor (const d of observers) {\n\t\t\td.handleChange(this, change);\n\t\t}\n\t}\n}\n\n\nexport class DerivedWithSetter<T, TChangeSummary = any, TOutChanges = any> extends Derived<T, TChangeSummary, TOutChanges> implements ISettableObservable<T, TOutChanges> {\n\tconstructor(\n\t\tdebugNameData: DebugNameData,\n\t\tcomputeFn: (reader: IDerivedReader<TOutChanges>, changeSummary: TChangeSummary) => T,\n\t\tchangeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\thandleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tequalityComparator: EqualityComparer<T>,\n\t\tpublic readonly set: (value: T, tx: ITransaction | undefined, change: TOutChanges) => void,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(\n\t\t\tdebugNameData,\n\t\t\tcomputeFn,\n\t\t\tchangeTracker,\n\t\t\thandleLastObserverRemoved,\n\t\t\tequalityComparator,\n\t\t\tdebugLocation,\n\t\t);\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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore, ISettableObservable, ITransaction } from '../base.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugNameData } from '../debugName.js';\nimport { BugIndicatingError, DisposableStore, EqualityComparer, assertFn, onBugIndicatingError } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport interface IDerivedReader<TChange = void> extends IReaderWithStore {\n}\n\nexport const enum DerivedState {\n\t/** Initial state, no previous value, recomputation needed */\n\tinitial = 0,\n\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t * After recomputation, we need to check the previous value to see if we changed as well.\n\t */\n\tstale = 2,\n\n\t/**\n\t * No change reported, our cached value is up to date.\n\t */\n\tupToDate = 3,\n}\n\nfunction derivedStateToString(state: DerivedState): string {\n\tswitch (state) {\n\t\tcase DerivedState.initial: return 'initial';\n\t\tcase DerivedState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase DerivedState.stale: return 'stale';\n\t\tcase DerivedState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class Derived<T, TChangeSummary = any, TChange = void> extends BaseObservable<T, TChange> implements IDerivedReader<TChange>, IObserver {\n\tprivate _state = DerivedState.initial;\n\tprivate _value: T | undefined = undefined;\n\tprivate _updateCount = 0;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined = undefined;\n\tprivate _isUpdating = false;\n\tprivate _isComputing = false;\n\tprivate _didReportChange = false;\n\tprivate _isInBeforeUpdate = false;\n\tprivate _isReaderValid = false;\n\tprivate _store: DisposableStore | undefined = undefined;\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\tprivate _removedObserverToCallEndUpdateOn: Set<IObserver> | null = null;\n\n\tpublic override get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _computeFn: (reader: IDerivedReader<TChange>, changeSummary: TChangeSummary) => T,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tprivate readonly _handleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(debugLocation);\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t}\n\n\tprotected override onLastObserverRemoved(): void {\n\t\t/**\n\t\t * We are not tracking changes anymore, thus we have to assume\n\t\t * that our cache is invalid.\n\t\t */\n\t\tthis._state = DerivedState.initial;\n\t\tthis._value = undefined;\n\t\tgetLogger()?.handleDerivedCleared(this);\n\t\tfor (const d of this._dependencies) {\n\t\t\td.removeObserver(this);\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t\tthis._store = undefined;\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t\tthis._delayedStore = undefined;\n\t\t}\n\n\t\tthis._handleLastObserverRemoved?.();\n\t}\n\n\tpublic override get(): T {\n\t\tconst checkEnabled = false; // TODO set to true\n\t\tif (this._isComputing && checkEnabled) {\n\t\t\t// investigate why this fails in the diff editor!\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tif (this._observers.size === 0) {\n\t\t\tlet result;\n\t\t\t// Without observers, we don't know when to clean up stuff.\n\t\t\t// Thus, we don't cache anything to prevent memory leaks.\n\t\t\ttry {\n\t\t\t\tthis._isReaderValid = true;\n\t\t\t\tlet changeSummary = undefined;\n\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\tchangeSummary = this._changeTracker.createChangeSummary(undefined);\n\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t}\n\t\t\t\tresult = this._computeFn(this, changeSummary!);\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t}\n\t\t\t// Clear new dependencies\n\t\t\tthis.onLastObserverRemoved();\n\t\t\treturn result;\n\n\t\t} else {\n\t\t\tdo {\n\t\t\t\t// We might not get a notification for a dependency that changed while it is updating,\n\t\t\t\t// thus we also have to ask all our depedencies if they changed in this case.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t/** might call {@link handleChange} indirectly, which could make us stale */\n\t\t\t\t\t\td.reportChanges();\n\n\t\t\t\t\t\tif (this._state as DerivedState === DerivedState.stale) {\n\t\t\t\t\t\t\t// The other dependencies will refresh on demand, so early break\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// We called report changes of all dependencies.\n\t\t\t\t// If we are still not stale, we can assume to be up to date again.\n\t\t\t\tif (this._state === DerivedState.dependenciesMightHaveChanged) {\n\t\t\t\t\tthis._state = DerivedState.upToDate;\n\t\t\t\t}\n\n\t\t\t\tif (this._state !== DerivedState.upToDate) {\n\t\t\t\t\tthis._recompute();\n\t\t\t\t}\n\t\t\t\t// In case recomputation changed one of our dependencies, we need to recompute again.\n\t\t\t} while (this._state !== DerivedState.upToDate);\n\t\t\treturn this._value!;\n\t\t}\n\t}\n\n\tprivate _recompute() {\n\t\tlet didChange = false;\n\t\tthis._isComputing = true;\n\t\tthis._didReportChange = false;\n\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\ttry {\n\t\t\tconst changeSummary = this._changeSummary!;\n\n\t\t\tthis._isReaderValid = true;\n\t\t\tif (this._changeTracker) {\n\t\t\t\tthis._isInBeforeUpdate = true;\n\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\tthis._isInBeforeUpdate = false;\n\t\t\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(changeSummary);\n\t\t\t}\n\n\t\t\tconst hadValue = this._state !== DerivedState.initial;\n\t\t\tconst oldValue = this._value;\n\t\t\tthis._state = DerivedState.upToDate;\n\n\t\t\tconst delayedStore = this._delayedStore;\n\t\t\tif (delayedStore !== undefined) {\n\t\t\t\tthis._delayedStore = undefined;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\tthis._store = undefined;\n\t\t\t\t}\n\t\t\t\t/** might call {@link handleChange} indirectly, which could invalidate us */\n\t\t\t\tthis._value = this._computeFn(this, changeSummary);\n\n\t\t\t} finally {\n\t\t\t\tthis._isReaderValid = false;\n\t\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\t\to.removeObserver(this);\n\t\t\t\t}\n\t\t\t\tthis._dependenciesToBeRemoved.clear();\n\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdidChange = this._didReportChange || (hadValue && !(this._equalityComparator(oldValue!, this._value)));\n\n\t\t\tgetLogger()?.handleObservableUpdated(this, {\n\t\t\t\toldValue,\n\t\t\t\tnewValue: this._value,\n\t\t\t\tchange: undefined,\n\t\t\t\tdidChange,\n\t\t\t\thadValue,\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tonBugIndicatingError(e);\n\t\t}\n\n\t\tthis._isComputing = false;\n\n\t\tif (!this._didReportChange && didChange) {\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handleChange(this, undefined);\n\t\t\t}\n\t\t} else {\n\t\t\tthis._didReportChange = false;\n\t\t}\n\t}\n\n\tpublic override toString(): string {\n\t\treturn `LazyDerived<${this.debugName}>`;\n\t}\n\n\t// IObserver Implementation\n\n\tpublic beginUpdate<T>(_observable: IObservable<T>): void {\n\t\tif (this._isUpdating) {\n\t\t\tthrow new BugIndicatingError('Cyclic deriveds are not supported yet!');\n\t\t}\n\n\t\tthis._updateCount++;\n\t\tthis._isUpdating = true;\n\t\ttry {\n\t\t\tconst propagateBeginUpdate = this._updateCount === 1;\n\t\t\tif (this._state === DerivedState.upToDate) {\n\t\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\t\t// If we propagate begin update, that will already signal a possible change.\n\t\t\t\tif (!propagateBeginUpdate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (propagateBeginUpdate) {\n\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\tr.beginUpdate(this); // This signals a possible change\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._isUpdating = false;\n\t\t}\n\t}\n\n\tpublic endUpdate<T>(_observable: IObservable<T>): void {\n\t\tthis._updateCount--;\n\t\tif (this._updateCount === 0) {\n\t\t\t// End update could change the observer list.\n\t\t\tconst observers = [...this._observers];\n\t\t\tfor (const r of observers) {\n\t\t\t\tr.endUpdate(this);\n\t\t\t}\n\t\t\tif (this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tconst observers = [...this._removedObserverToCallEndUpdateOn];\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = null;\n\t\t\t\tfor (const r of observers) {\n\t\t\t\t\tr.endUpdate(this);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange<T>(observable: IObservable<T>): void {\n\t\t// In all other states, observers already know that we might have changed.\n\t\tif (this._state === DerivedState.upToDate && this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable)) {\n\t\t\tthis._state = DerivedState.dependenciesMightHaveChanged;\n\t\t\tfor (const r of this._observers) {\n\t\t\t\tr.handlePossibleChange(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable) || this._isInBeforeUpdate) {\n\t\t\tgetLogger()?.handleDerivedDependencyChanged(this, observable, change);\n\n\t\t\tlet shouldReact = false;\n\t\t\ttry {\n\t\t\t\tshouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\n\t\t\tconst wasUpToDate = this._state === DerivedState.upToDate;\n\t\t\tif (shouldReact && (this._state === DerivedState.dependenciesMightHaveChanged || wasUpToDate)) {\n\t\t\t\tthis._state = DerivedState.stale;\n\t\t\t\tif (wasUpToDate) {\n\t\t\t\t\tfor (const r of this._observers) {\n\t\t\t\t\t\tr.handlePossibleChange(this);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// IReader Implementation\n\n\tprivate _ensureReaderValid(): void {\n\t\tif (!this._isReaderValid) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureReaderValid();\n\n\t\t// Subscribe before getting the value to enable caching\n\t\tobservable.addObserver(this);\n\t\t/** This might call {@link handleChange} indirectly, which could invalidate us */\n\t\tconst value = observable.get();\n\t\t// Which is why we only add the observable to the dependencies now.\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tget store(): DisposableStore {\n\t\tthis._ensureReaderValid();\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tpublic override addObserver(observer: IObserver): void {\n\t\tconst shouldCallBeginUpdate = !this._observers.has(observer) && this._updateCount > 0;\n\t\tsuper.addObserver(observer);\n\n\t\tif (shouldCallBeginUpdate) {\n\t\t\tif (this._removedObserverToCallEndUpdateOn && this._removedObserverToCallEndUpdateOn.has(observer)) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn.delete(observer);\n\t\t\t} else {\n\t\t\t\tobserver.beginUpdate(this);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic override removeObserver(observer: IObserver): void {\n\t\tif (this._observers.has(observer) && this._updateCount > 0) {\n\t\t\tif (!this._removedObserverToCallEndUpdateOn) {\n\t\t\t\tthis._removedObserverToCallEndUpdateOn = new Set();\n\t\t\t}\n\t\t\tthis._removedObserverToCallEndUpdateOn.add(observer);\n\t\t}\n\t\tsuper.removeObserver(observer);\n\t}\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tstate: this._state,\n\t\t\tstateStr: derivedStateToString(this._state),\n\t\t\tupdateCount: this._updateCount,\n\t\t\tisComputing: this._isComputing,\n\t\t\tdependencies: this._dependencies,\n\t\t\tvalue: this._value,\n\t\t};\n\t}\n\n\tpublic debugSetValue(newValue: unknown) {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tthis._value = newValue as any;\n\t}\n\n\tpublic debugRecompute(): void {\n\t\tif (!this._isComputing) {\n\t\t\tthis._recompute();\n\t\t} else {\n\t\t\tthis._state = DerivedState.stale;\n\t\t}\n\t}\n\n\tpublic setValue(newValue: T, tx: ITransaction, change: TChange): void {\n\t\tthis._value = newValue;\n\t\tconst observers = this._observers;\n\t\ttx.updateObserver(this, this);\n\t\tfor (const d of observers) {\n\t\t\td.handleChange(this, change);\n\t\t}\n\t}\n}\n\n\nexport class DerivedWithSetter<T, TChangeSummary = any, TOutChanges = any> extends Derived<T, TChangeSummary, TOutChanges> implements ISettableObservable<T, TOutChanges> {\n\tconstructor(\n\t\tdebugNameData: DebugNameData,\n\t\tcomputeFn: (reader: IDerivedReader<TOutChanges>, changeSummary: TChangeSummary) => T,\n\t\tchangeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\thandleLastObserverRemoved: (() => void) | undefined = undefined,\n\t\tequalityComparator: EqualityComparer<T>,\n\t\tpublic readonly set: (value: T, tx: ITransaction | undefined, change: TOutChanges) => void,\n\t\tdebugLocation: DebugLocation,\n\t) {\n\t\tsuper(\n\t\t\tdebugNameData,\n\t\t\tcomputeFn,\n\t\t\tchangeTracker,\n\t\t\thandleLastObserverRemoved,\n\t\t\tequalityComparator,\n\t\t\tdebugLocation,\n\t\t);\n\t}\n}\n"]}
@@ -90,6 +90,7 @@ export class FromEventObservable extends BaseObservable {
90
90
  }
91
91
  }
92
92
  debugSetValue(value) {
93
+ // eslint-disable-next-line local/code-no-any-casts
93
94
  this._value = value;
94
95
  }
95
96
  debugGetState() {
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/observableInternal/observables/observableFromEvent.ts","vs/base/common/observableInternal/observables/observableFromEvent.ts"],"names":[],"mappings":"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","file":"observableFromEvent.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 { IObservable, ITransaction } from '../base.js';\nimport { subtransaction } from '../transaction.js';\nimport { EqualityComparer, Event, IDisposable, strictEquals } from '../commonFacade/deps.js';\nimport { DebugOwner, DebugNameData, IDebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n\nexport function observableFromEvent<T, TArgs = unknown>(\n\towner: DebugOwner,\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation?: DebugLocation,\n): IObservable<T>;\nexport function observableFromEvent<T, TArgs = unknown>(\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n): IObservable<T>;\nexport function observableFromEvent(...args:\n\t[owner: DebugOwner, event: Event<any>, getValue: (args: any | undefined) => any, debugLocation?: DebugLocation] |\n\t[event: Event<any>, getValue: (args: any | undefined) => any]\n): IObservable<any> {\n\tlet owner;\n\tlet event;\n\tlet getValue;\n\tlet debugLocation;\n\tif (args.length === 2) {\n\t\t[event, getValue] = args;\n\t} else {\n\t\t[owner, event, getValue, debugLocation] = args;\n\t}\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(owner, undefined, getValue),\n\t\tevent,\n\t\tgetValue,\n\t\t() => FromEventObservable.globalTransaction,\n\t\tstrictEquals,\n\t\tdebugLocation ?? DebugLocation.ofCaller()\n\t);\n}\n\nexport function observableFromEventOpts<T, TArgs = unknown>(\n\toptions: IDebugNameData & {\n\t\tequalsFn?: EqualityComparer<T>;\n\t},\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation = DebugLocation.ofCaller()\n): IObservable<T> {\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue),\n\t\tevent,\n\t\tgetValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation\n\t);\n}\n\nexport class FromEventObservable<TArgs, T> extends BaseObservable<T> {\n\tpublic static globalTransaction: ITransaction | undefined;\n\n\tprivate _value: T | undefined;\n\tprivate _hasValue = false;\n\tprivate _subscription: IDisposable | undefined;\n\n\tconstructor(\n\t\tprivate readonly _debugNameData: DebugNameData,\n\t\tprivate readonly event: Event<TArgs>,\n\t\tpublic readonly _getValue: (args: TArgs | undefined) => T,\n\t\tprivate readonly _getTransaction: () => ITransaction | undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tsuper(debugLocation);\n\t}\n\n\tprivate getDebugName(): string | undefined {\n\t\treturn this._debugNameData.getDebugName(this);\n\t}\n\n\tpublic get debugName(): string {\n\t\tconst name = this.getDebugName();\n\t\treturn 'From Event' + (name ? `: ${name}` : '');\n\t}\n\n\tprotected override onFirstObserverAdded(): void {\n\t\tthis._subscription = this.event(this.handleEvent);\n\t}\n\n\tprivate readonly handleEvent = (args: TArgs | undefined) => {\n\t\tconst newValue = this._getValue(args);\n\t\tconst oldValue = this._value;\n\n\t\tconst didChange = !this._hasValue || !(this._equalityComparator(oldValue!, newValue));\n\t\tlet didRunTransaction = false;\n\n\t\tif (didChange) {\n\t\t\tthis._value = newValue;\n\n\t\t\tif (this._hasValue) {\n\t\t\t\tdidRunTransaction = true;\n\t\t\t\tsubtransaction(\n\t\t\t\t\tthis._getTransaction(),\n\t\t\t\t\t(tx) => {\n\t\t\t\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\n\t\t\t\t\t\tfor (const o of this._observers) {\n\t\t\t\t\t\t\ttx.updateObserver(o, this);\n\t\t\t\t\t\t\to.handleChange(this, undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tconst name = this.getDebugName();\n\t\t\t\t\t\treturn 'Event fired' + (name ? `: ${name}` : '');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._hasValue = true;\n\t\t}\n\n\t\tif (!didRunTransaction) {\n\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\t\t}\n\t};\n\n\tprotected override onLastObserverRemoved(): void {\n\t\tthis._subscription!.dispose();\n\t\tthis._subscription = undefined;\n\t\tthis._hasValue = false;\n\t\tthis._value = undefined;\n\t}\n\n\tpublic get(): T {\n\t\tif (this._subscription) {\n\t\t\tif (!this._hasValue) {\n\t\t\t\tthis.handleEvent(undefined);\n\t\t\t}\n\t\t\treturn this._value!;\n\t\t} else {\n\t\t\t// no cache, as there are no subscribers to keep it updated\n\t\t\tconst value = this._getValue(undefined);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tpublic debugSetValue(value: unknown): void {\n\t\tthis._value = value as any;\n\t}\n\n\tpublic debugGetState() {\n\t\treturn { value: this._value, hasValue: this._hasValue };\n\t}\n}\n\nexport namespace observableFromEvent {\n\texport const Observer = FromEventObservable;\n\n\texport function batchEventsGlobally(tx: ITransaction, fn: () => void): void {\n\t\tlet didSet = false;\n\t\tif (FromEventObservable.globalTransaction === undefined) {\n\t\t\tFromEventObservable.globalTransaction = tx;\n\t\t\tdidSet = true;\n\t\t}\n\t\ttry {\n\t\t\tfn();\n\t\t} finally {\n\t\t\tif (didSet) {\n\t\t\t\tFromEventObservable.globalTransaction = undefined;\n\t\t\t}\n\t\t}\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 { IObservable, ITransaction } from '../base.js';\nimport { subtransaction } from '../transaction.js';\nimport { EqualityComparer, Event, IDisposable, strictEquals } from '../commonFacade/deps.js';\nimport { DebugOwner, DebugNameData, IDebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n\nexport function observableFromEvent<T, TArgs = unknown>(\n\towner: DebugOwner,\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation?: DebugLocation,\n): IObservable<T>;\nexport function observableFromEvent<T, TArgs = unknown>(\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n): IObservable<T>;\nexport function observableFromEvent(...args:\n\t[owner: DebugOwner, event: Event<any>, getValue: (args: any | undefined) => any, debugLocation?: DebugLocation] |\n\t[event: Event<any>, getValue: (args: any | undefined) => any]\n): IObservable<any> {\n\tlet owner;\n\tlet event;\n\tlet getValue;\n\tlet debugLocation;\n\tif (args.length === 2) {\n\t\t[event, getValue] = args;\n\t} else {\n\t\t[owner, event, getValue, debugLocation] = args;\n\t}\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(owner, undefined, getValue),\n\t\tevent,\n\t\tgetValue,\n\t\t() => FromEventObservable.globalTransaction,\n\t\tstrictEquals,\n\t\tdebugLocation ?? DebugLocation.ofCaller()\n\t);\n}\n\nexport function observableFromEventOpts<T, TArgs = unknown>(\n\toptions: IDebugNameData & {\n\t\tequalsFn?: EqualityComparer<T>;\n\t},\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation = DebugLocation.ofCaller()\n): IObservable<T> {\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue),\n\t\tevent,\n\t\tgetValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation\n\t);\n}\n\nexport class FromEventObservable<TArgs, T> extends BaseObservable<T> {\n\tpublic static globalTransaction: ITransaction | undefined;\n\n\tprivate _value: T | undefined;\n\tprivate _hasValue = false;\n\tprivate _subscription: IDisposable | undefined;\n\n\tconstructor(\n\t\tprivate readonly _debugNameData: DebugNameData,\n\t\tprivate readonly event: Event<TArgs>,\n\t\tpublic readonly _getValue: (args: TArgs | undefined) => T,\n\t\tprivate readonly _getTransaction: () => ITransaction | undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tsuper(debugLocation);\n\t}\n\n\tprivate getDebugName(): string | undefined {\n\t\treturn this._debugNameData.getDebugName(this);\n\t}\n\n\tpublic get debugName(): string {\n\t\tconst name = this.getDebugName();\n\t\treturn 'From Event' + (name ? `: ${name}` : '');\n\t}\n\n\tprotected override onFirstObserverAdded(): void {\n\t\tthis._subscription = this.event(this.handleEvent);\n\t}\n\n\tprivate readonly handleEvent = (args: TArgs | undefined) => {\n\t\tconst newValue = this._getValue(args);\n\t\tconst oldValue = this._value;\n\n\t\tconst didChange = !this._hasValue || !(this._equalityComparator(oldValue!, newValue));\n\t\tlet didRunTransaction = false;\n\n\t\tif (didChange) {\n\t\t\tthis._value = newValue;\n\n\t\t\tif (this._hasValue) {\n\t\t\t\tdidRunTransaction = true;\n\t\t\t\tsubtransaction(\n\t\t\t\t\tthis._getTransaction(),\n\t\t\t\t\t(tx) => {\n\t\t\t\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\n\t\t\t\t\t\tfor (const o of this._observers) {\n\t\t\t\t\t\t\ttx.updateObserver(o, this);\n\t\t\t\t\t\t\to.handleChange(this, undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tconst name = this.getDebugName();\n\t\t\t\t\t\treturn 'Event fired' + (name ? `: ${name}` : '');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._hasValue = true;\n\t\t}\n\n\t\tif (!didRunTransaction) {\n\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\t\t}\n\t};\n\n\tprotected override onLastObserverRemoved(): void {\n\t\tthis._subscription!.dispose();\n\t\tthis._subscription = undefined;\n\t\tthis._hasValue = false;\n\t\tthis._value = undefined;\n\t}\n\n\tpublic get(): T {\n\t\tif (this._subscription) {\n\t\t\tif (!this._hasValue) {\n\t\t\t\tthis.handleEvent(undefined);\n\t\t\t}\n\t\t\treturn this._value!;\n\t\t} else {\n\t\t\t// no cache, as there are no subscribers to keep it updated\n\t\t\tconst value = this._getValue(undefined);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tpublic debugSetValue(value: unknown): void {\n\t\tthis._value = value as any;\n\t}\n\n\tpublic debugGetState() {\n\t\treturn { value: this._value, hasValue: this._hasValue };\n\t}\n}\n\nexport namespace observableFromEvent {\n\texport const Observer = FromEventObservable;\n\n\texport function batchEventsGlobally(tx: ITransaction, fn: () => void): void {\n\t\tlet didSet = false;\n\t\tif (FromEventObservable.globalTransaction === undefined) {\n\t\t\tFromEventObservable.globalTransaction = tx;\n\t\t\tdidSet = true;\n\t\t}\n\t\ttry {\n\t\t\tfn();\n\t\t} finally {\n\t\t\tif (didSet) {\n\t\t\t\tFromEventObservable.globalTransaction = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/observableInternal/observables/observableFromEvent.ts","vs/base/common/observableInternal/observables/observableFromEvent.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAGhG,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAwC,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,EAAc,aAAa,EAAkB,MAAM,iBAAiB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAapD,MAAM,UAAU,mBAAmB,CAAC,GAAG,IAEuB;IAE7D,IAAI,KAAK,CAAC;IACV,IAAI,KAAK,CAAC;IACV,IAAI,QAAQ,CAAC;IACb,IAAI,aAAa,CAAC;IAClB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,IAAI,CAAC;IAChD,CAAC;IACD,OAAO,IAAI,mBAAmB,CAC7B,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,EAC7C,KAAK,EACL,QAAQ,EACR,GAAG,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,EAC3C,YAAY,EACZ,aAAa,IAAI,aAAa,CAAC,QAAQ,EAAE,CACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,OAEC,EACD,KAAmB,EACnB,QAAwC,EACxC,aAAa,GAAG,aAAa,CAAC,QAAQ,EAAE;IAExC,OAAO,IAAI,mBAAmB,CAC7B,IAAI,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,gBAAgB,IAAI,QAAQ,CAAC,EACzF,KAAK,EACL,QAAQ,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,OAAO,CAAC,QAAQ,IAAI,YAAY,EAAE,aAAa,CACtG,CAAC;AACH,CAAC;AAED,MAAM,OAAO,mBAA8B,SAAQ,cAAiB;IAOnE,YACkB,cAA6B,EAC7B,KAAmB,EACpB,SAAyC,EACxC,eAA+C,EAC/C,mBAAwC,EACzD,aAA4B;QAE5B,KAAK,CAAC,aAAa,CAAC,CAAC;QAPJ,mBAAc,GAAd,cAAc,CAAe;QAC7B,UAAK,GAAL,KAAK,CAAc;QACpB,cAAS,GAAT,SAAS,CAAgC;QACxC,oBAAe,GAAf,eAAe,CAAgC;QAC/C,wBAAmB,GAAnB,mBAAmB,CAAqB;QARlD,cAAS,GAAG,KAAK,CAAC;QA2BT,gBAAW,GAAG,CAAC,IAAuB,EAAE,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;YAE7B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;YACtF,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAE9B,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;gBAEvB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACpB,iBAAiB,GAAG,IAAI,CAAC;oBACzB,cAAc,CACb,IAAI,CAAC,eAAe,EAAE,EACtB,CAAC,EAAE,EAAE,EAAE;wBACN,SAAS,EAAE,EAAE,uBAAuB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;wBAE3H,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BACjC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;4BAC3B,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;wBACjC,CAAC;oBACF,CAAC,EACD,GAAG,EAAE;wBACJ,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;wBACjC,OAAO,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClD,CAAC,CACD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,CAAC;YAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACxB,SAAS,EAAE,EAAE,uBAAuB,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC5H,CAAC;QACF,CAAC,CAAC;IAjDF,CAAC;IAEO,YAAY;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,IAAW,SAAS;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACjC,OAAO,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAEkB,oBAAoB;QACtC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAsCkB,qBAAqB;QACvC,IAAI,CAAC,aAAc,CAAC,OAAO,EAAE,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IACzB,CAAC;IAEM,GAAG;QACT,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,IAAI,CAAC,MAAO,CAAC;QACrB,CAAC;aAAM,CAAC;YACP,2DAA2D;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;YACxC,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAEM,aAAa,CAAC,KAAc;QAClC,mDAAmD;QACnD,IAAI,CAAC,MAAM,GAAG,KAAY,CAAC;IAC5B,CAAC;IAEM,aAAa;QACnB,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IACzD,CAAC;CACD;AAED,WAAiB,mBAAmB;IACtB,4BAAQ,GAAG,mBAAmB,CAAC;IAE5C,SAAgB,mBAAmB,CAAC,EAAgB,EAAE,EAAc;QACnE,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,mBAAmB,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzD,mBAAmB,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC3C,MAAM,GAAG,IAAI,CAAC;QACf,CAAC;QACD,IAAI,CAAC;YACJ,EAAE,EAAE,CAAC;QACN,CAAC;gBAAS,CAAC;YACV,IAAI,MAAM,EAAE,CAAC;gBACZ,mBAAmB,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACnD,CAAC;QACF,CAAC;IACF,CAAC;IAbe,uCAAmB,sBAalC,CAAA;AACF,CAAC,EAjBgB,mBAAmB,KAAnB,mBAAmB,QAiBnC","file":"observableFromEvent.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 { IObservable, ITransaction } from '../base.js';\nimport { subtransaction } from '../transaction.js';\nimport { EqualityComparer, Event, IDisposable, strictEquals } from '../commonFacade/deps.js';\nimport { DebugOwner, DebugNameData, IDebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n\nexport function observableFromEvent<T, TArgs = unknown>(\n\towner: DebugOwner,\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation?: DebugLocation,\n): IObservable<T>;\nexport function observableFromEvent<T, TArgs = unknown>(\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n): IObservable<T>;\nexport function observableFromEvent(...args:\n\t[owner: DebugOwner, event: Event<any>, getValue: (args: any | undefined) => any, debugLocation?: DebugLocation] |\n\t[event: Event<any>, getValue: (args: any | undefined) => any]\n): IObservable<any> {\n\tlet owner;\n\tlet event;\n\tlet getValue;\n\tlet debugLocation;\n\tif (args.length === 2) {\n\t\t[event, getValue] = args;\n\t} else {\n\t\t[owner, event, getValue, debugLocation] = args;\n\t}\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(owner, undefined, getValue),\n\t\tevent,\n\t\tgetValue,\n\t\t() => FromEventObservable.globalTransaction,\n\t\tstrictEquals,\n\t\tdebugLocation ?? DebugLocation.ofCaller()\n\t);\n}\n\nexport function observableFromEventOpts<T, TArgs = unknown>(\n\toptions: IDebugNameData & {\n\t\tequalsFn?: EqualityComparer<T>;\n\t},\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation = DebugLocation.ofCaller()\n): IObservable<T> {\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue),\n\t\tevent,\n\t\tgetValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation\n\t);\n}\n\nexport class FromEventObservable<TArgs, T> extends BaseObservable<T> {\n\tpublic static globalTransaction: ITransaction | undefined;\n\n\tprivate _value: T | undefined;\n\tprivate _hasValue = false;\n\tprivate _subscription: IDisposable | undefined;\n\n\tconstructor(\n\t\tprivate readonly _debugNameData: DebugNameData,\n\t\tprivate readonly event: Event<TArgs>,\n\t\tpublic readonly _getValue: (args: TArgs | undefined) => T,\n\t\tprivate readonly _getTransaction: () => ITransaction | undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tsuper(debugLocation);\n\t}\n\n\tprivate getDebugName(): string | undefined {\n\t\treturn this._debugNameData.getDebugName(this);\n\t}\n\n\tpublic get debugName(): string {\n\t\tconst name = this.getDebugName();\n\t\treturn 'From Event' + (name ? `: ${name}` : '');\n\t}\n\n\tprotected override onFirstObserverAdded(): void {\n\t\tthis._subscription = this.event(this.handleEvent);\n\t}\n\n\tprivate readonly handleEvent = (args: TArgs | undefined) => {\n\t\tconst newValue = this._getValue(args);\n\t\tconst oldValue = this._value;\n\n\t\tconst didChange = !this._hasValue || !(this._equalityComparator(oldValue!, newValue));\n\t\tlet didRunTransaction = false;\n\n\t\tif (didChange) {\n\t\t\tthis._value = newValue;\n\n\t\t\tif (this._hasValue) {\n\t\t\t\tdidRunTransaction = true;\n\t\t\t\tsubtransaction(\n\t\t\t\t\tthis._getTransaction(),\n\t\t\t\t\t(tx) => {\n\t\t\t\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\n\t\t\t\t\t\tfor (const o of this._observers) {\n\t\t\t\t\t\t\ttx.updateObserver(o, this);\n\t\t\t\t\t\t\to.handleChange(this, undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tconst name = this.getDebugName();\n\t\t\t\t\t\treturn 'Event fired' + (name ? `: ${name}` : '');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._hasValue = true;\n\t\t}\n\n\t\tif (!didRunTransaction) {\n\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\t\t}\n\t};\n\n\tprotected override onLastObserverRemoved(): void {\n\t\tthis._subscription!.dispose();\n\t\tthis._subscription = undefined;\n\t\tthis._hasValue = false;\n\t\tthis._value = undefined;\n\t}\n\n\tpublic get(): T {\n\t\tif (this._subscription) {\n\t\t\tif (!this._hasValue) {\n\t\t\t\tthis.handleEvent(undefined);\n\t\t\t}\n\t\t\treturn this._value!;\n\t\t} else {\n\t\t\t// no cache, as there are no subscribers to keep it updated\n\t\t\tconst value = this._getValue(undefined);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tpublic debugSetValue(value: unknown): void {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tthis._value = value as any;\n\t}\n\n\tpublic debugGetState() {\n\t\treturn { value: this._value, hasValue: this._hasValue };\n\t}\n}\n\nexport namespace observableFromEvent {\n\texport const Observer = FromEventObservable;\n\n\texport function batchEventsGlobally(tx: ITransaction, fn: () => void): void {\n\t\tlet didSet = false;\n\t\tif (FromEventObservable.globalTransaction === undefined) {\n\t\t\tFromEventObservable.globalTransaction = tx;\n\t\t\tdidSet = true;\n\t\t}\n\t\ttry {\n\t\t\tfn();\n\t\t} finally {\n\t\t\tif (didSet) {\n\t\t\t\tFromEventObservable.globalTransaction = undefined;\n\t\t\t}\n\t\t}\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 { IObservable, ITransaction } from '../base.js';\nimport { subtransaction } from '../transaction.js';\nimport { EqualityComparer, Event, IDisposable, strictEquals } from '../commonFacade/deps.js';\nimport { DebugOwner, DebugNameData, IDebugNameData } from '../debugName.js';\nimport { getLogger } from '../logging/logging.js';\nimport { BaseObservable } from './baseObservable.js';\nimport { DebugLocation } from '../debugLocation.js';\n\n\nexport function observableFromEvent<T, TArgs = unknown>(\n\towner: DebugOwner,\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation?: DebugLocation,\n): IObservable<T>;\nexport function observableFromEvent<T, TArgs = unknown>(\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n): IObservable<T>;\nexport function observableFromEvent(...args:\n\t[owner: DebugOwner, event: Event<any>, getValue: (args: any | undefined) => any, debugLocation?: DebugLocation] |\n\t[event: Event<any>, getValue: (args: any | undefined) => any]\n): IObservable<any> {\n\tlet owner;\n\tlet event;\n\tlet getValue;\n\tlet debugLocation;\n\tif (args.length === 2) {\n\t\t[event, getValue] = args;\n\t} else {\n\t\t[owner, event, getValue, debugLocation] = args;\n\t}\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(owner, undefined, getValue),\n\t\tevent,\n\t\tgetValue,\n\t\t() => FromEventObservable.globalTransaction,\n\t\tstrictEquals,\n\t\tdebugLocation ?? DebugLocation.ofCaller()\n\t);\n}\n\nexport function observableFromEventOpts<T, TArgs = unknown>(\n\toptions: IDebugNameData & {\n\t\tequalsFn?: EqualityComparer<T>;\n\t},\n\tevent: Event<TArgs>,\n\tgetValue: (args: TArgs | undefined) => T,\n\tdebugLocation = DebugLocation.ofCaller()\n): IObservable<T> {\n\treturn new FromEventObservable(\n\t\tnew DebugNameData(options.owner, options.debugName, options.debugReferenceFn ?? getValue),\n\t\tevent,\n\t\tgetValue, () => FromEventObservable.globalTransaction, options.equalsFn ?? strictEquals, debugLocation\n\t);\n}\n\nexport class FromEventObservable<TArgs, T> extends BaseObservable<T> {\n\tpublic static globalTransaction: ITransaction | undefined;\n\n\tprivate _value: T | undefined;\n\tprivate _hasValue = false;\n\tprivate _subscription: IDisposable | undefined;\n\n\tconstructor(\n\t\tprivate readonly _debugNameData: DebugNameData,\n\t\tprivate readonly event: Event<TArgs>,\n\t\tpublic readonly _getValue: (args: TArgs | undefined) => T,\n\t\tprivate readonly _getTransaction: () => ITransaction | undefined,\n\t\tprivate readonly _equalityComparator: EqualityComparer<T>,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tsuper(debugLocation);\n\t}\n\n\tprivate getDebugName(): string | undefined {\n\t\treturn this._debugNameData.getDebugName(this);\n\t}\n\n\tpublic get debugName(): string {\n\t\tconst name = this.getDebugName();\n\t\treturn 'From Event' + (name ? `: ${name}` : '');\n\t}\n\n\tprotected override onFirstObserverAdded(): void {\n\t\tthis._subscription = this.event(this.handleEvent);\n\t}\n\n\tprivate readonly handleEvent = (args: TArgs | undefined) => {\n\t\tconst newValue = this._getValue(args);\n\t\tconst oldValue = this._value;\n\n\t\tconst didChange = !this._hasValue || !(this._equalityComparator(oldValue!, newValue));\n\t\tlet didRunTransaction = false;\n\n\t\tif (didChange) {\n\t\t\tthis._value = newValue;\n\n\t\t\tif (this._hasValue) {\n\t\t\t\tdidRunTransaction = true;\n\t\t\t\tsubtransaction(\n\t\t\t\t\tthis._getTransaction(),\n\t\t\t\t\t(tx) => {\n\t\t\t\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\n\t\t\t\t\t\tfor (const o of this._observers) {\n\t\t\t\t\t\t\ttx.updateObserver(o, this);\n\t\t\t\t\t\t\to.handleChange(this, undefined);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t() => {\n\t\t\t\t\t\tconst name = this.getDebugName();\n\t\t\t\t\t\treturn 'Event fired' + (name ? `: ${name}` : '');\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t}\n\t\t\tthis._hasValue = true;\n\t\t}\n\n\t\tif (!didRunTransaction) {\n\t\t\tgetLogger()?.handleObservableUpdated(this, { oldValue, newValue, change: undefined, didChange, hadValue: this._hasValue });\n\t\t}\n\t};\n\n\tprotected override onLastObserverRemoved(): void {\n\t\tthis._subscription!.dispose();\n\t\tthis._subscription = undefined;\n\t\tthis._hasValue = false;\n\t\tthis._value = undefined;\n\t}\n\n\tpublic get(): T {\n\t\tif (this._subscription) {\n\t\t\tif (!this._hasValue) {\n\t\t\t\tthis.handleEvent(undefined);\n\t\t\t}\n\t\t\treturn this._value!;\n\t\t} else {\n\t\t\t// no cache, as there are no subscribers to keep it updated\n\t\t\tconst value = this._getValue(undefined);\n\t\t\treturn value;\n\t\t}\n\t}\n\n\tpublic debugSetValue(value: unknown): void {\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tthis._value = value as any;\n\t}\n\n\tpublic debugGetState() {\n\t\treturn { value: this._value, hasValue: this._hasValue };\n\t}\n}\n\nexport namespace observableFromEvent {\n\texport const Observer = FromEventObservable;\n\n\texport function batchEventsGlobally(tx: ITransaction, fn: () => void): void {\n\t\tlet didSet = false;\n\t\tif (FromEventObservable.globalTransaction === undefined) {\n\t\t\tFromEventObservable.globalTransaction = tx;\n\t\t\tdidSet = true;\n\t\t}\n\t\ttry {\n\t\t\tfn();\n\t\t} finally {\n\t\t\tif (didSet) {\n\t\t\t\tFromEventObservable.globalTransaction = undefined;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -147,6 +147,7 @@ export class AutorunObserver {
147
147
  const shouldReact = this._changeTracker ? this._changeTracker.handleChange({
148
148
  changedObservable: observable,
149
149
  change,
150
+ // eslint-disable-next-line local/code-no-any-casts
150
151
  didChange: (o) => o === observable,
151
152
  }, this._changeSummary) : true;
152
153
  if (shouldReact) {
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/observableInternal/reactions/autorunImpl.ts","vs/base/common/observableInternal/reactions/autorunImpl.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAIhG,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,eAAe,EAAe,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC5J,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAkBlD,SAAS,oBAAoB,CAAC,KAAmB;IAChD,QAAQ,KAAK,EAAE,CAAC;QACf,sDAA8C,CAAC,CAAC,OAAO,8BAA8B,CAAC;QACtF,+BAAuB,CAAC,CAAC,OAAO,OAAO,CAAC;QACxC,kCAA0B,CAAC,CAAC,OAAO,UAAU,CAAC;QAC9C,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC;IAC7B,CAAC;AACF,CAAC;AAED,MAAM,OAAO,eAAe;IAS3B,IAAW,SAAS;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;IAChE,CAAC;IAED,YACiB,cAA6B,EAC7B,MAAyE,EACxE,cAA0D,EAC3E,aAA4B;QAHZ,mBAAc,GAAd,cAAc,CAAe;QAC7B,WAAM,GAAN,MAAM,CAAmE;QACxE,mBAAc,GAAd,cAAc,CAA4C;QAfpE,WAAM,8BAAsB;QAC5B,iBAAY,GAAG,CAAC,CAAC;QACjB,cAAS,GAAG,KAAK,CAAC;QAClB,kBAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;QAC5C,6BAAwB,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEvD,eAAU,GAAG,KAAK,CAAC;QAkLnB,WAAM,GAAgC,SAAS,CAAC;QAahD,kBAAa,GAAgC,SAAS,CAAC;QAnL9D,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC1E,SAAS,EAAE,EAAE,oBAAoB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QAEZ,eAAe,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IAEM,OAAO;QACb,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACR,CAAC;QACD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACpC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;QACnD,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACtC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;QAED,SAAS,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;QACzC,cAAc,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAEO,IAAI;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,wBAAwB,CAAC;QAC/C,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,aAAa,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;QAE9B,IAAI,CAAC,MAAM,gCAAwB,CAAC;QAEpC,IAAI,CAAC;YACJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,SAAS,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,aAAa,GAAG,IAAI,CAAC,cAAe,CAAC;gBAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;gBACxC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;oBAChC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;gBAChC,CAAC;gBACD,IAAI,CAAC;oBACJ,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;oBACvB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACzB,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;wBACxD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,0BAA0B;oBACzG,CAAC;oBACD,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;wBAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;wBACtB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;oBACzB,CAAC;oBAED,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,0BAA0B;gBAC7D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACzB,CAAC;wBAAS,CAAC;oBACV,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;oBACxB,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAChC,YAAY,CAAC,OAAO,EAAE,CAAC;oBACxB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrB,SAAS,EAAE,EAAE,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,2GAA2G;YAC3G,mFAAmF;YACnF,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC/C,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;YACnD,CAAC;YACD,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QACvC,CAAC;IACF,CAAC;IAEM,QAAQ;QACd,OAAO,WAAW,IAAI,CAAC,SAAS,GAAG,CAAC;IACrC,CAAC;IAED,2BAA2B;IACpB,WAAW,CAAC,WAA6B;QAC/C,IAAI,IAAI,CAAC,MAAM,kCAA0B,EAAE,CAAC;YAC3C,IAAI,CAAC,MAAM,oDAA4C,CAAC;QACzD,CAAC;QACD,IAAI,CAAC,YAAY,EAAE,CAAC;IACrB,CAAC;IAEM,SAAS,CAAC,WAA6B;QAC7C,IAAI,CAAC;YACJ,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC;oBACH,IAAI,IAAI,CAAC,MAAM,sDAA8C,EAAE,CAAC;wBAC/D,IAAI,CAAC,MAAM,gCAAwB,CAAC;wBACpC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;4BACpC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,0BAA0B;4BAC7C,IAAI,IAAI,CAAC,MAAsB,+BAAuB,EAAE,CAAC;gCACxD,gDAAgD;gCAChD,MAAM;4BACP,CAAC;wBACF,CAAC;oBACF,CAAC;oBAED,IAAI,IAAI,CAAC,MAAM,kCAA0B,EAAE,CAAC;wBAC3C,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,mCAAmC;oBACjD,CAAC;gBACF,CAAC,QAAQ,IAAI,CAAC,MAAM,kCAA0B,EAAE;YACjD,CAAC;QACF,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,YAAY,EAAE,CAAC;QACrB,CAAC;QAED,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAEM,oBAAoB,CAAC,UAA4B;QACvD,IAAI,IAAI,CAAC,MAAM,kCAA0B,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YAC7E,IAAI,CAAC,MAAM,oDAA4C,CAAC;QACzD,CAAC;IACF,CAAC;IAEM,YAAY,CAAa,UAA6C,EAAE,MAAe;QAC7F,IAAI,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,SAAS,EAAE,EAAE,8BAA8B,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;YACtE,IAAI,CAAC;gBACJ,0BAA0B;gBAC1B,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC;oBAC1E,iBAAiB,EAAE,UAAU;oBAC7B,MAAM;oBACN,SAAS,EAAE,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,UAAiB;iBACtD,EAAE,IAAI,CAAC,cAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBAChC,IAAI,WAAW,EAAE,CAAC;oBACjB,IAAI,CAAC,MAAM,6BAAqB,CAAC;gBAClC,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,oBAAoB,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC;QACF,CAAC;IACF,CAAC;IAEO,aAAa,CAAC,UAA2C;QAChE,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAC7F,CAAC;IAED,yBAAyB;IAEjB,gBAAgB;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAAC,MAAM,IAAI,kBAAkB,CAAC,gEAAgE,CAAC,CAAC;QAAC,CAAC;IAC1H,CAAC;IAEM,cAAc,CAAI,UAA0B;QAClD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAExB,8CAA8C;QAC9C,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;QACpD,CAAC;QAED,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,0BAA0B;QACxD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,0BAA0B;QAC1D,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACnC,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,KAAK,CAAC;IACd,CAAC;IAGD,IAAI,KAAK;QACR,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,kBAAkB,CAAC,mCAAmC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACpB,CAAC;IAIM,aAAa;QACnB,OAAO;YACN,SAAS,EAAE,IAAI,CAAC,UAAU;YAC1B,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,KAAK,EAAE,IAAI,CAAC,MAAM;YAClB,QAAQ,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;SAC3C,CAAC;IACH,CAAC;IAEM,UAAU;QAChB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACtB,IAAI,CAAC,IAAI,EAAE,CAAC;QACb,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,MAAM,6BAAqB,CAAC;QAClC,CAAC;IACF,CAAC;CACD","file":"autorunImpl.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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore } from '../base.js';\nimport { DebugNameData } from '../debugName.js';\nimport { assertFn, BugIndicatingError, DisposableStore, IDisposable, markAsDisposed, onBugIndicatingError, trackDisposable } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport const enum AutorunState {\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t */\n\tstale = 2,\n\tupToDate = 3,\n}\n\nfunction autorunStateToString(state: AutorunState): string {\n\tswitch (state) {\n\t\tcase AutorunState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase AutorunState.stale: return 'stale';\n\t\tcase AutorunState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class AutorunObserver<TChangeSummary = any> implements IObserver, IReaderWithStore, IDisposable {\n\tprivate _state = AutorunState.stale;\n\tprivate _updateCount = 0;\n\tprivate _disposed = false;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined;\n\tprivate _isRunning = false;\n\n\tpublic get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _runFn: (reader: IReaderWithStore, changeSummary: TChangeSummary) => void,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t\tgetLogger()?.handleAutorunCreated(this, debugLocation);\n\t\tthis._run();\n\n\t\ttrackDisposable(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\t\tfor (const o of this._dependencies) {\n\t\t\to.removeObserver(this); // Warning: external call!\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t}\n\n\t\tgetLogger()?.handleAutorunDisposed(this);\n\t\tmarkAsDisposed(this);\n\t}\n\n\tprivate _run() {\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\tthis._state = AutorunState.upToDate;\n\n\t\ttry {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunStarted(this);\n\t\t\t\tconst changeSummary = this._changeSummary!;\n\t\t\t\tconst delayedStore = this._delayedStore;\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tthis._delayedStore = undefined;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tthis._isRunning = true;\n\t\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t\t\tthis._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n\t\t\t\t\t}\n\t\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\t\tthis._store = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runFn(this, changeSummary); // Warning: external call!\n\t\t\t\t} catch (e) {\n\t\t\t\t\tonBugIndicatingError(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis._isRunning = false;\n\t\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunFinished(this);\n\t\t\t}\n\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\to.removeObserver(this); // Warning: external call!\n\t\t\t}\n\t\t\tthis._dependenciesToBeRemoved.clear();\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `Autorun<${this.debugName}>`;\n\t}\n\n\t// IObserver implementation\n\tpublic beginUpdate(_observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t\tthis._updateCount++;\n\t}\n\n\tpublic endUpdate(_observable: IObservable<any>): void {\n\t\ttry {\n\t\t\tif (this._updateCount === 1) {\n\t\t\t\tdo {\n\t\t\t\t\tif (this._state === AutorunState.dependenciesMightHaveChanged) {\n\t\t\t\t\t\tthis._state = AutorunState.upToDate;\n\t\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t\td.reportChanges(); // Warning: external call!\n\t\t\t\t\t\t\tif (this._state as AutorunState === AutorunState.stale) {\n\t\t\t\t\t\t\t\t// The other dependencies will refresh on demand\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._state !== AutorunState.upToDate) {\n\t\t\t\t\t\tthis._run(); // Warning: indirect external call!\n\t\t\t\t\t}\n\t\t\t\t} while (this._state !== AutorunState.upToDate);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._updateCount--;\n\t\t}\n\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange(observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate && this._isDependency(observable)) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._isDependency(observable)) {\n\t\t\tgetLogger()?.handleAutorunDependencyChanged(this, observable, change);\n\t\t\ttry {\n\t\t\t\t// Warning: external call!\n\t\t\t\tconst shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t\tif (shouldReact) {\n\t\t\t\t\tthis._state = AutorunState.stale;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _isDependency(observable: IObservableWithChange<any, any>): boolean {\n\t\treturn this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n\t}\n\n\t// IReader implementation\n\n\tprivate _ensureNoRunning(): void {\n\t\tif (!this._isRunning) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureNoRunning();\n\n\t\t// In case the run action disposes the autorun\n\t\tif (this._disposed) {\n\t\t\treturn observable.get(); // warning: external call!\n\t\t}\n\n\t\tobservable.addObserver(this); // warning: external call!\n\t\tconst value = observable.get(); // warning: external call!\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tprivate _store: DisposableStore | undefined = undefined;\n\tget store(): DisposableStore {\n\t\tthis._ensureNoRunning();\n\t\tif (this._disposed) {\n\t\t\tthrow new BugIndicatingError('Cannot access store after dispose');\n\t\t}\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tisRunning: this._isRunning,\n\t\t\tupdateCount: this._updateCount,\n\t\t\tdependencies: this._dependencies,\n\t\t\tstate: this._state,\n\t\t\tstateStr: autorunStateToString(this._state),\n\t\t};\n\t}\n\n\tpublic debugRerun(): void {\n\t\tif (!this._isRunning) {\n\t\t\tthis._run();\n\t\t} else {\n\t\t\tthis._state = AutorunState.stale;\n\t\t}\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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore } from '../base.js';\nimport { DebugNameData } from '../debugName.js';\nimport { assertFn, BugIndicatingError, DisposableStore, IDisposable, markAsDisposed, onBugIndicatingError, trackDisposable } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport const enum AutorunState {\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t */\n\tstale = 2,\n\tupToDate = 3,\n}\n\nfunction autorunStateToString(state: AutorunState): string {\n\tswitch (state) {\n\t\tcase AutorunState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase AutorunState.stale: return 'stale';\n\t\tcase AutorunState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class AutorunObserver<TChangeSummary = any> implements IObserver, IReaderWithStore, IDisposable {\n\tprivate _state = AutorunState.stale;\n\tprivate _updateCount = 0;\n\tprivate _disposed = false;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined;\n\tprivate _isRunning = false;\n\n\tpublic get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _runFn: (reader: IReaderWithStore, changeSummary: TChangeSummary) => void,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t\tgetLogger()?.handleAutorunCreated(this, debugLocation);\n\t\tthis._run();\n\n\t\ttrackDisposable(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\t\tfor (const o of this._dependencies) {\n\t\t\to.removeObserver(this); // Warning: external call!\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t}\n\n\t\tgetLogger()?.handleAutorunDisposed(this);\n\t\tmarkAsDisposed(this);\n\t}\n\n\tprivate _run() {\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\tthis._state = AutorunState.upToDate;\n\n\t\ttry {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunStarted(this);\n\t\t\t\tconst changeSummary = this._changeSummary!;\n\t\t\t\tconst delayedStore = this._delayedStore;\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tthis._delayedStore = undefined;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tthis._isRunning = true;\n\t\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t\t\tthis._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n\t\t\t\t\t}\n\t\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\t\tthis._store = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runFn(this, changeSummary); // Warning: external call!\n\t\t\t\t} catch (e) {\n\t\t\t\t\tonBugIndicatingError(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis._isRunning = false;\n\t\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunFinished(this);\n\t\t\t}\n\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\to.removeObserver(this); // Warning: external call!\n\t\t\t}\n\t\t\tthis._dependenciesToBeRemoved.clear();\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `Autorun<${this.debugName}>`;\n\t}\n\n\t// IObserver implementation\n\tpublic beginUpdate(_observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t\tthis._updateCount++;\n\t}\n\n\tpublic endUpdate(_observable: IObservable<any>): void {\n\t\ttry {\n\t\t\tif (this._updateCount === 1) {\n\t\t\t\tdo {\n\t\t\t\t\tif (this._state === AutorunState.dependenciesMightHaveChanged) {\n\t\t\t\t\t\tthis._state = AutorunState.upToDate;\n\t\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t\td.reportChanges(); // Warning: external call!\n\t\t\t\t\t\t\tif (this._state as AutorunState === AutorunState.stale) {\n\t\t\t\t\t\t\t\t// The other dependencies will refresh on demand\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._state !== AutorunState.upToDate) {\n\t\t\t\t\t\tthis._run(); // Warning: indirect external call!\n\t\t\t\t\t}\n\t\t\t\t} while (this._state !== AutorunState.upToDate);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._updateCount--;\n\t\t}\n\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange(observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate && this._isDependency(observable)) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._isDependency(observable)) {\n\t\t\tgetLogger()?.handleAutorunDependencyChanged(this, observable, change);\n\t\t\ttry {\n\t\t\t\t// Warning: external call!\n\t\t\t\tconst shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t\tif (shouldReact) {\n\t\t\t\t\tthis._state = AutorunState.stale;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _isDependency(observable: IObservableWithChange<any, any>): boolean {\n\t\treturn this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n\t}\n\n\t// IReader implementation\n\n\tprivate _ensureNoRunning(): void {\n\t\tif (!this._isRunning) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureNoRunning();\n\n\t\t// In case the run action disposes the autorun\n\t\tif (this._disposed) {\n\t\t\treturn observable.get(); // warning: external call!\n\t\t}\n\n\t\tobservable.addObserver(this); // warning: external call!\n\t\tconst value = observable.get(); // warning: external call!\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tprivate _store: DisposableStore | undefined = undefined;\n\tget store(): DisposableStore {\n\t\tthis._ensureNoRunning();\n\t\tif (this._disposed) {\n\t\t\tthrow new BugIndicatingError('Cannot access store after dispose');\n\t\t}\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tisRunning: this._isRunning,\n\t\t\tupdateCount: this._updateCount,\n\t\t\tdependencies: this._dependencies,\n\t\t\tstate: this._state,\n\t\t\tstateStr: autorunStateToString(this._state),\n\t\t};\n\t}\n\n\tpublic debugRerun(): void {\n\t\tif (!this._isRunning) {\n\t\t\tthis._run();\n\t\t} else {\n\t\t\tthis._state = AutorunState.stale;\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/observableInternal/reactions/autorunImpl.ts","vs/base/common/observableInternal/reactions/autorunImpl.ts"],"names":[],"mappings":"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","file":"autorunImpl.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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore } from '../base.js';\nimport { DebugNameData } from '../debugName.js';\nimport { assertFn, BugIndicatingError, DisposableStore, IDisposable, markAsDisposed, onBugIndicatingError, trackDisposable } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport const enum AutorunState {\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t */\n\tstale = 2,\n\tupToDate = 3,\n}\n\nfunction autorunStateToString(state: AutorunState): string {\n\tswitch (state) {\n\t\tcase AutorunState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase AutorunState.stale: return 'stale';\n\t\tcase AutorunState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class AutorunObserver<TChangeSummary = any> implements IObserver, IReaderWithStore, IDisposable {\n\tprivate _state = AutorunState.stale;\n\tprivate _updateCount = 0;\n\tprivate _disposed = false;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined;\n\tprivate _isRunning = false;\n\n\tpublic get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _runFn: (reader: IReaderWithStore, changeSummary: TChangeSummary) => void,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t\tgetLogger()?.handleAutorunCreated(this, debugLocation);\n\t\tthis._run();\n\n\t\ttrackDisposable(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\t\tfor (const o of this._dependencies) {\n\t\t\to.removeObserver(this); // Warning: external call!\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t}\n\n\t\tgetLogger()?.handleAutorunDisposed(this);\n\t\tmarkAsDisposed(this);\n\t}\n\n\tprivate _run() {\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\tthis._state = AutorunState.upToDate;\n\n\t\ttry {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunStarted(this);\n\t\t\t\tconst changeSummary = this._changeSummary!;\n\t\t\t\tconst delayedStore = this._delayedStore;\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tthis._delayedStore = undefined;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tthis._isRunning = true;\n\t\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t\t\tthis._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n\t\t\t\t\t}\n\t\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\t\tthis._store = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runFn(this, changeSummary); // Warning: external call!\n\t\t\t\t} catch (e) {\n\t\t\t\t\tonBugIndicatingError(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis._isRunning = false;\n\t\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunFinished(this);\n\t\t\t}\n\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\to.removeObserver(this); // Warning: external call!\n\t\t\t}\n\t\t\tthis._dependenciesToBeRemoved.clear();\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `Autorun<${this.debugName}>`;\n\t}\n\n\t// IObserver implementation\n\tpublic beginUpdate(_observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t\tthis._updateCount++;\n\t}\n\n\tpublic endUpdate(_observable: IObservable<any>): void {\n\t\ttry {\n\t\t\tif (this._updateCount === 1) {\n\t\t\t\tdo {\n\t\t\t\t\tif (this._state === AutorunState.dependenciesMightHaveChanged) {\n\t\t\t\t\t\tthis._state = AutorunState.upToDate;\n\t\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t\td.reportChanges(); // Warning: external call!\n\t\t\t\t\t\t\tif (this._state as AutorunState === AutorunState.stale) {\n\t\t\t\t\t\t\t\t// The other dependencies will refresh on demand\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._state !== AutorunState.upToDate) {\n\t\t\t\t\t\tthis._run(); // Warning: indirect external call!\n\t\t\t\t\t}\n\t\t\t\t} while (this._state !== AutorunState.upToDate);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._updateCount--;\n\t\t}\n\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange(observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate && this._isDependency(observable)) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._isDependency(observable)) {\n\t\t\tgetLogger()?.handleAutorunDependencyChanged(this, observable, change);\n\t\t\ttry {\n\t\t\t\t// Warning: external call!\n\t\t\t\tconst shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t\tif (shouldReact) {\n\t\t\t\t\tthis._state = AutorunState.stale;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _isDependency(observable: IObservableWithChange<any, any>): boolean {\n\t\treturn this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n\t}\n\n\t// IReader implementation\n\n\tprivate _ensureNoRunning(): void {\n\t\tif (!this._isRunning) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureNoRunning();\n\n\t\t// In case the run action disposes the autorun\n\t\tif (this._disposed) {\n\t\t\treturn observable.get(); // warning: external call!\n\t\t}\n\n\t\tobservable.addObserver(this); // warning: external call!\n\t\tconst value = observable.get(); // warning: external call!\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tprivate _store: DisposableStore | undefined = undefined;\n\tget store(): DisposableStore {\n\t\tthis._ensureNoRunning();\n\t\tif (this._disposed) {\n\t\t\tthrow new BugIndicatingError('Cannot access store after dispose');\n\t\t}\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tisRunning: this._isRunning,\n\t\t\tupdateCount: this._updateCount,\n\t\t\tdependencies: this._dependencies,\n\t\t\tstate: this._state,\n\t\t\tstateStr: autorunStateToString(this._state),\n\t\t};\n\t}\n\n\tpublic debugRerun(): void {\n\t\tif (!this._isRunning) {\n\t\t\tthis._run();\n\t\t} else {\n\t\t\tthis._state = AutorunState.stale;\n\t\t}\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 { IObservable, IObservableWithChange, IObserver, IReaderWithStore } from '../base.js';\nimport { DebugNameData } from '../debugName.js';\nimport { assertFn, BugIndicatingError, DisposableStore, IDisposable, markAsDisposed, onBugIndicatingError, trackDisposable } from '../commonFacade/deps.js';\nimport { getLogger } from '../logging/logging.js';\nimport { IChangeTracker } from '../changeTracker.js';\nimport { DebugLocation } from '../debugLocation.js';\n\nexport const enum AutorunState {\n\t/**\n\t * A dependency could have changed.\n\t * We need to explicitly ask them if at least one dependency changed.\n\t */\n\tdependenciesMightHaveChanged = 1,\n\n\t/**\n\t * A dependency changed and we need to recompute.\n\t */\n\tstale = 2,\n\tupToDate = 3,\n}\n\nfunction autorunStateToString(state: AutorunState): string {\n\tswitch (state) {\n\t\tcase AutorunState.dependenciesMightHaveChanged: return 'dependenciesMightHaveChanged';\n\t\tcase AutorunState.stale: return 'stale';\n\t\tcase AutorunState.upToDate: return 'upToDate';\n\t\tdefault: return '<unknown>';\n\t}\n}\n\nexport class AutorunObserver<TChangeSummary = any> implements IObserver, IReaderWithStore, IDisposable {\n\tprivate _state = AutorunState.stale;\n\tprivate _updateCount = 0;\n\tprivate _disposed = false;\n\tprivate _dependencies = new Set<IObservable<any>>();\n\tprivate _dependenciesToBeRemoved = new Set<IObservable<any>>();\n\tprivate _changeSummary: TChangeSummary | undefined;\n\tprivate _isRunning = false;\n\n\tpublic get debugName(): string {\n\t\treturn this._debugNameData.getDebugName(this) ?? '(anonymous)';\n\t}\n\n\tconstructor(\n\t\tpublic readonly _debugNameData: DebugNameData,\n\t\tpublic readonly _runFn: (reader: IReaderWithStore, changeSummary: TChangeSummary) => void,\n\t\tprivate readonly _changeTracker: IChangeTracker<TChangeSummary> | undefined,\n\t\tdebugLocation: DebugLocation\n\t) {\n\t\tthis._changeSummary = this._changeTracker?.createChangeSummary(undefined);\n\t\tgetLogger()?.handleAutorunCreated(this, debugLocation);\n\t\tthis._run();\n\n\t\ttrackDisposable(this);\n\t}\n\n\tpublic dispose(): void {\n\t\tif (this._disposed) {\n\t\t\treturn;\n\t\t}\n\t\tthis._disposed = true;\n\t\tfor (const o of this._dependencies) {\n\t\t\to.removeObserver(this); // Warning: external call!\n\t\t}\n\t\tthis._dependencies.clear();\n\n\t\tif (this._store !== undefined) {\n\t\t\tthis._store.dispose();\n\t\t}\n\t\tif (this._delayedStore !== undefined) {\n\t\t\tthis._delayedStore.dispose();\n\t\t}\n\n\t\tgetLogger()?.handleAutorunDisposed(this);\n\t\tmarkAsDisposed(this);\n\t}\n\n\tprivate _run() {\n\t\tconst emptySet = this._dependenciesToBeRemoved;\n\t\tthis._dependenciesToBeRemoved = this._dependencies;\n\t\tthis._dependencies = emptySet;\n\n\t\tthis._state = AutorunState.upToDate;\n\n\t\ttry {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunStarted(this);\n\t\t\t\tconst changeSummary = this._changeSummary!;\n\t\t\t\tconst delayedStore = this._delayedStore;\n\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\tthis._delayedStore = undefined;\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tthis._isRunning = true;\n\t\t\t\t\tif (this._changeTracker) {\n\t\t\t\t\t\tthis._changeTracker.beforeUpdate?.(this, changeSummary);\n\t\t\t\t\t\tthis._changeSummary = this._changeTracker.createChangeSummary(changeSummary); // Warning: external call!\n\t\t\t\t\t}\n\t\t\t\t\tif (this._store !== undefined) {\n\t\t\t\t\t\tthis._store.dispose();\n\t\t\t\t\t\tthis._store = undefined;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._runFn(this, changeSummary); // Warning: external call!\n\t\t\t\t} catch (e) {\n\t\t\t\t\tonBugIndicatingError(e);\n\t\t\t\t} finally {\n\t\t\t\t\tthis._isRunning = false;\n\t\t\t\t\tif (delayedStore !== undefined) {\n\t\t\t\t\t\tdelayedStore.dispose();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tif (!this._disposed) {\n\t\t\t\tgetLogger()?.handleAutorunFinished(this);\n\t\t\t}\n\t\t\t// We don't want our observed observables to think that they are (not even temporarily) not being observed.\n\t\t\t// Thus, we only unsubscribe from observables that are definitely not read anymore.\n\t\t\tfor (const o of this._dependenciesToBeRemoved) {\n\t\t\t\to.removeObserver(this); // Warning: external call!\n\t\t\t}\n\t\t\tthis._dependenciesToBeRemoved.clear();\n\t\t}\n\t}\n\n\tpublic toString(): string {\n\t\treturn `Autorun<${this.debugName}>`;\n\t}\n\n\t// IObserver implementation\n\tpublic beginUpdate(_observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t\tthis._updateCount++;\n\t}\n\n\tpublic endUpdate(_observable: IObservable<any>): void {\n\t\ttry {\n\t\t\tif (this._updateCount === 1) {\n\t\t\t\tdo {\n\t\t\t\t\tif (this._state === AutorunState.dependenciesMightHaveChanged) {\n\t\t\t\t\t\tthis._state = AutorunState.upToDate;\n\t\t\t\t\t\tfor (const d of this._dependencies) {\n\t\t\t\t\t\t\td.reportChanges(); // Warning: external call!\n\t\t\t\t\t\t\tif (this._state as AutorunState === AutorunState.stale) {\n\t\t\t\t\t\t\t\t// The other dependencies will refresh on demand\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (this._state !== AutorunState.upToDate) {\n\t\t\t\t\t\tthis._run(); // Warning: indirect external call!\n\t\t\t\t\t}\n\t\t\t\t} while (this._state !== AutorunState.upToDate);\n\t\t\t}\n\t\t} finally {\n\t\t\tthis._updateCount--;\n\t\t}\n\n\t\tassertFn(() => this._updateCount >= 0);\n\t}\n\n\tpublic handlePossibleChange(observable: IObservable<any>): void {\n\t\tif (this._state === AutorunState.upToDate && this._isDependency(observable)) {\n\t\t\tthis._state = AutorunState.dependenciesMightHaveChanged;\n\t\t}\n\t}\n\n\tpublic handleChange<T, TChange>(observable: IObservableWithChange<T, TChange>, change: TChange): void {\n\t\tif (this._isDependency(observable)) {\n\t\t\tgetLogger()?.handleAutorunDependencyChanged(this, observable, change);\n\t\t\ttry {\n\t\t\t\t// Warning: external call!\n\t\t\t\tconst shouldReact = this._changeTracker ? this._changeTracker.handleChange({\n\t\t\t\t\tchangedObservable: observable,\n\t\t\t\t\tchange,\n\t\t\t\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\t\t\t\tdidChange: (o): this is any => o === observable as any,\n\t\t\t\t}, this._changeSummary!) : true;\n\t\t\t\tif (shouldReact) {\n\t\t\t\t\tthis._state = AutorunState.stale;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tonBugIndicatingError(e);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate _isDependency(observable: IObservableWithChange<any, any>): boolean {\n\t\treturn this._dependencies.has(observable) && !this._dependenciesToBeRemoved.has(observable);\n\t}\n\n\t// IReader implementation\n\n\tprivate _ensureNoRunning(): void {\n\t\tif (!this._isRunning) { throw new BugIndicatingError('The reader object cannot be used outside its compute function!'); }\n\t}\n\n\tpublic readObservable<T>(observable: IObservable<T>): T {\n\t\tthis._ensureNoRunning();\n\n\t\t// In case the run action disposes the autorun\n\t\tif (this._disposed) {\n\t\t\treturn observable.get(); // warning: external call!\n\t\t}\n\n\t\tobservable.addObserver(this); // warning: external call!\n\t\tconst value = observable.get(); // warning: external call!\n\t\tthis._dependencies.add(observable);\n\t\tthis._dependenciesToBeRemoved.delete(observable);\n\t\treturn value;\n\t}\n\n\tprivate _store: DisposableStore | undefined = undefined;\n\tget store(): DisposableStore {\n\t\tthis._ensureNoRunning();\n\t\tif (this._disposed) {\n\t\t\tthrow new BugIndicatingError('Cannot access store after dispose');\n\t\t}\n\n\t\tif (this._store === undefined) {\n\t\t\tthis._store = new DisposableStore();\n\t\t}\n\t\treturn this._store;\n\t}\n\n\tprivate _delayedStore: DisposableStore | undefined = undefined;\n\n\tpublic debugGetState() {\n\t\treturn {\n\t\t\tisRunning: this._isRunning,\n\t\t\tupdateCount: this._updateCount,\n\t\t\tdependencies: this._dependencies,\n\t\t\tstate: this._state,\n\t\t\tstateStr: autorunStateToString(this._state),\n\t\t};\n\t}\n\n\tpublic debugRerun(): void {\n\t\tif (!this._isRunning) {\n\t\t\tthis._run();\n\t\t} else {\n\t\t\tthis._state = AutorunState.stale;\n\t\t}\n\t}\n}\n"]}
@@ -5,6 +5,7 @@
5
5
  import { isMacintosh, isWindows } from './platform.js';
6
6
  let safeProcess;
7
7
  // Native sandbox environment
8
+ // eslint-disable-next-line local/code-no-any-casts
8
9
  const vscodeGlobal = globalThis.vscode;
9
10
  if (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {
10
11
  const sandboxProcess = vscodeGlobal.process;
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/process.ts","vs/base/common/process.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAgB,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAErE,IAAI,WAAsE,CAAC;AAG3E,6BAA6B;AAC7B,MAAM,YAAY,GAAI,UAAkB,CAAC,MAAM,CAAC;AAChD,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;IACxF,MAAM,cAAc,GAAiB,YAAY,CAAC,OAAO,CAAC;IAC1D,WAAW,GAAG;QACb,IAAI,QAAQ,KAAK,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,KAAK,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,GAAG,KAAK,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACtC,CAAC;AACH,CAAC;AAED,6BAA6B;KACxB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;IACxF,WAAW,GAAG;QACb,IAAI,QAAQ,KAAK,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,GAAG,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KAC5D,CAAC;AACH,CAAC;AAED,kBAAkB;KACb,CAAC;IACL,WAAW,GAAG;QAEb,YAAY;QACZ,IAAI,QAAQ,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,IAAI,IAAI,KAAK,OAAO,SAAS,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAE/D,cAAc;QACd,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QACxB,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;KACrB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC","file":"process.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 { INodeProcess, isMacintosh, isWindows } from './platform.js';\n\nlet safeProcess: Omit<INodeProcess, 'arch'> & { arch: string | undefined };\ndeclare const process: INodeProcess;\n\n// Native sandbox environment\nconst vscodeGlobal = (globalThis as any).vscode;\nif (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {\n\tconst sandboxProcess: INodeProcess = vscodeGlobal.process;\n\tsafeProcess = {\n\t\tget platform() { return sandboxProcess.platform; },\n\t\tget arch() { return sandboxProcess.arch; },\n\t\tget env() { return sandboxProcess.env; },\n\t\tcwd() { return sandboxProcess.cwd(); }\n\t};\n}\n\n// Native node.js environment\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n\tsafeProcess = {\n\t\tget platform() { return process.platform; },\n\t\tget arch() { return process.arch; },\n\t\tget env() { return process.env; },\n\t\tcwd() { return process.env['VSCODE_CWD'] || process.cwd(); }\n\t};\n}\n\n// Web environment\nelse {\n\tsafeProcess = {\n\n\t\t// Supported\n\t\tget platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n\t\tget arch() { return undefined; /* arch is undefined in web */ },\n\n\t\t// Unsupported\n\t\tget env() { return {}; },\n\t\tcwd() { return '/'; }\n\t};\n}\n\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n *\n * @skipMangle\n */\nexport const cwd = safeProcess.cwd;\n\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\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 { INodeProcess, isMacintosh, isWindows } from './platform.js';\n\nlet safeProcess: Omit<INodeProcess, 'arch'> & { arch: string | undefined };\ndeclare const process: INodeProcess;\n\n// Native sandbox environment\nconst vscodeGlobal = (globalThis as any).vscode;\nif (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {\n\tconst sandboxProcess: INodeProcess = vscodeGlobal.process;\n\tsafeProcess = {\n\t\tget platform() { return sandboxProcess.platform; },\n\t\tget arch() { return sandboxProcess.arch; },\n\t\tget env() { return sandboxProcess.env; },\n\t\tcwd() { return sandboxProcess.cwd(); }\n\t};\n}\n\n// Native node.js environment\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n\tsafeProcess = {\n\t\tget platform() { return process.platform; },\n\t\tget arch() { return process.arch; },\n\t\tget env() { return process.env; },\n\t\tcwd() { return process.env['VSCODE_CWD'] || process.cwd(); }\n\t};\n}\n\n// Web environment\nelse {\n\tsafeProcess = {\n\n\t\t// Supported\n\t\tget platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n\t\tget arch() { return undefined; /* arch is undefined in web */ },\n\n\t\t// Unsupported\n\t\tget env() { return {}; },\n\t\tcwd() { return '/'; }\n\t};\n}\n\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n *\n * @skipMangle\n */\nexport const cwd = safeProcess.cwd;\n\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/process.ts","vs/base/common/process.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAgB,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAErE,IAAI,WAAsE,CAAC;AAG3E,6BAA6B;AAC7B,mDAAmD;AACnD,MAAM,YAAY,GAAI,UAAkB,CAAC,MAAM,CAAC;AAChD,IAAI,OAAO,YAAY,KAAK,WAAW,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;IACxF,MAAM,cAAc,GAAiB,YAAY,CAAC,OAAO,CAAC;IAC1D,WAAW,GAAG;QACb,IAAI,QAAQ,KAAK,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,KAAK,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;QACxC,GAAG,KAAK,OAAO,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACtC,CAAC;AACH,CAAC;AAED,6BAA6B;KACxB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;IACxF,WAAW,GAAG;QACb,IAAI,QAAQ,KAAK,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3C,IAAI,IAAI,KAAK,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACjC,GAAG,KAAK,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KAC5D,CAAC;AACH,CAAC;AAED,kBAAkB;KACb,CAAC;IACL,WAAW,GAAG;QAEb,YAAY;QACZ,IAAI,QAAQ,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACjF,IAAI,IAAI,KAAK,OAAO,SAAS,CAAC,CAAC,8BAA8B,CAAC,CAAC;QAE/D,cAAc;QACd,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;QACxB,GAAG,KAAK,OAAO,GAAG,CAAC,CAAC,CAAC;KACrB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC;AAEnC;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC","file":"process.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 { INodeProcess, isMacintosh, isWindows } from './platform.js';\n\nlet safeProcess: Omit<INodeProcess, 'arch'> & { arch: string | undefined };\ndeclare const process: INodeProcess;\n\n// Native sandbox environment\n// eslint-disable-next-line local/code-no-any-casts\nconst vscodeGlobal = (globalThis as any).vscode;\nif (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {\n\tconst sandboxProcess: INodeProcess = vscodeGlobal.process;\n\tsafeProcess = {\n\t\tget platform() { return sandboxProcess.platform; },\n\t\tget arch() { return sandboxProcess.arch; },\n\t\tget env() { return sandboxProcess.env; },\n\t\tcwd() { return sandboxProcess.cwd(); }\n\t};\n}\n\n// Native node.js environment\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n\tsafeProcess = {\n\t\tget platform() { return process.platform; },\n\t\tget arch() { return process.arch; },\n\t\tget env() { return process.env; },\n\t\tcwd() { return process.env['VSCODE_CWD'] || process.cwd(); }\n\t};\n}\n\n// Web environment\nelse {\n\tsafeProcess = {\n\n\t\t// Supported\n\t\tget platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n\t\tget arch() { return undefined; /* arch is undefined in web */ },\n\n\t\t// Unsupported\n\t\tget env() { return {}; },\n\t\tcwd() { return '/'; }\n\t};\n}\n\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n *\n * @skipMangle\n */\nexport const cwd = safeProcess.cwd;\n\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\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 { INodeProcess, isMacintosh, isWindows } from './platform.js';\n\nlet safeProcess: Omit<INodeProcess, 'arch'> & { arch: string | undefined };\ndeclare const process: INodeProcess;\n\n// Native sandbox environment\n// eslint-disable-next-line local/code-no-any-casts\nconst vscodeGlobal = (globalThis as any).vscode;\nif (typeof vscodeGlobal !== 'undefined' && typeof vscodeGlobal.process !== 'undefined') {\n\tconst sandboxProcess: INodeProcess = vscodeGlobal.process;\n\tsafeProcess = {\n\t\tget platform() { return sandboxProcess.platform; },\n\t\tget arch() { return sandboxProcess.arch; },\n\t\tget env() { return sandboxProcess.env; },\n\t\tcwd() { return sandboxProcess.cwd(); }\n\t};\n}\n\n// Native node.js environment\nelse if (typeof process !== 'undefined' && typeof process?.versions?.node === 'string') {\n\tsafeProcess = {\n\t\tget platform() { return process.platform; },\n\t\tget arch() { return process.arch; },\n\t\tget env() { return process.env; },\n\t\tcwd() { return process.env['VSCODE_CWD'] || process.cwd(); }\n\t};\n}\n\n// Web environment\nelse {\n\tsafeProcess = {\n\n\t\t// Supported\n\t\tget platform() { return isWindows ? 'win32' : isMacintosh ? 'darwin' : 'linux'; },\n\t\tget arch() { return undefined; /* arch is undefined in web */ },\n\n\t\t// Unsupported\n\t\tget env() { return {}; },\n\t\tcwd() { return '/'; }\n\t};\n}\n\n/**\n * Provides safe access to the `cwd` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `/`.\n *\n * @skipMangle\n */\nexport const cwd = safeProcess.cwd;\n\n/**\n * Provides safe access to the `env` property in node.js, sandboxed or web\n * environments.\n *\n * Note: in web, this property is hardcoded to be `{}`.\n */\nexport const env = safeProcess.env;\n\n/**\n * Provides safe access to the `platform` property in node.js, sandboxed or web\n * environments.\n */\nexport const platform = safeProcess.platform;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"product.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sources":["vs/base/common/product.ts"],"names":[],"mappings":"","sourcesContent":["\n\nexport interface IProductConfiguration {\n\treadonly quality?: string;\n}\n"]}
1
+ {"version":3,"file":"product.js","sourceRoot":"file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src","sources":["vs/base/common/product.ts"],"names":[],"mappings":"","sourcesContent":["\n\nexport interface IProductConfiguration {\n\treadonly version: string;\n\treadonly quality?: string;\n\n\treadonly nameShort: string;\n\treadonly nameLong: string;\n\treadonly dataFolderName: string;\n\treadonly serverDataFolderName?: string;\n\n\treadonly defaultChatAgent?: IDefaultChatAgent;\n}\n\nexport interface IDefaultChatAgent {\n\treadonly completionsEnablementSetting: string;\n}\n"]}
@@ -42,6 +42,7 @@ export function isNumber(obj) {
42
42
  * @returns whether the provided parameter is an Iterable, casting to the given generic
43
43
  */
44
44
  export function isIterable(obj) {
45
+ // eslint-disable-next-line local/code-no-any-casts
45
46
  return !!obj && typeof obj[Symbol.iterator] === 'function';
46
47
  }
47
48
  /**
@@ -137,6 +138,7 @@ export function validateConstraint(arg, constraint) {
137
138
  catch {
138
139
  // ignore
139
140
  }
141
+ // eslint-disable-next-line local/code-no-any-casts
140
142
  if (!isUndefinedOrNull(arg) && arg.constructor === constraint) {
141
143
  return;
142
144
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/types.ts","vs/base/common/types.ts"],"names":[],"mappings":"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","file":"types.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 { assert } from './assert.js';\n\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str: unknown): str is string {\n\treturn (typeof str === 'string');\n}\n\n/**\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj: unknown): obj is Object {\n\t// The method can't do a type cast since there are type (like strings) which\n\t// are subclasses of any put not positvely matched by the function. Hence type\n\t// narrowing results in wrong results.\n\treturn typeof obj === 'object'\n\t\t&& obj !== null\n\t\t&& !Array.isArray(obj)\n\t\t&& !(obj instanceof RegExp)\n\t\t&& !(obj instanceof Date);\n}\n\n/**\n * @returns whether the provided parameter is of type `Buffer` or Uint8Array dervived type\n */\nexport function isTypedArray(obj: unknown): obj is Object {\n\tconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\treturn typeof obj === 'object'\n\t\t&& obj instanceof TypedArray;\n}\n\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj: unknown): obj is number {\n\treturn (typeof obj === 'number' && !isNaN(obj));\n}\n\n/**\n * @returns whether the provided parameter is an Iterable, casting to the given generic\n */\nexport function isIterable<T>(obj: unknown): obj is Iterable<T> {\n\treturn !!obj && typeof (obj as any)[Symbol.iterator] === 'function';\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj: unknown): obj is boolean {\n\treturn (obj === true || obj === false);\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: unknown): obj is undefined {\n\treturn (typeof obj === 'undefined');\n}\n\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined<T>(arg: T | null | undefined): arg is T {\n\treturn !isUndefinedOrNull(arg);\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: unknown): obj is undefined | null {\n\treturn (isUndefined(obj) || obj === null);\n}\n\n\nexport function assertType(condition: unknown, type?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n\t}\n}\n\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n *\n * @see {@link assertDefined} for a similar utility that leverages TS assertion functions to narrow down the type of `arg` to be non-nullable.\n */\nexport function assertReturnsDefined<T>(arg: T | null | undefined): NonNullable<T> {\n\tassert(\n\t\targ !== null && arg !== undefined,\n\t\t'Argument is `undefined` or `null`.',\n\t);\n\n\treturn arg;\n}\n\n/**\n * Checks if the provided value is one of the vales in the provided list.\n *\n * ## Examples\n *\n * ```typescript\n * // note! item type is a `subset of string`\n * type TItem = ':' | '.' | '/';\n *\n * // note! item is type of `string` here\n * const item: string = ':';\n * // list of the items to check against\n * const list: TItem[] = [':', '.'];\n *\n * // ok\n * assert(\n * isOneOf(item, list),\n * 'Must succeed.',\n * );\n *\n * // `item` is of `TItem` type now\n * ```\n */\nexport const isOneOf = <TType, TSubtype extends TType>(\n\tvalue: TType,\n\tvalidValues: readonly TSubtype[],\n): value is TSubtype => {\n\t// note! it is OK to type cast here, because we rely on the includes\n\t// utility to check if the value is present in the provided list\n\treturn validValues.includes(<TSubtype>value);\n};\n\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj: unknown): obj is Function {\n\treturn (typeof obj === 'function');\n}\n\nexport type TypeConstraint = string | Function;\n\nexport function validateConstraints(args: unknown[], constraints: Array<TypeConstraint | undefined>): void {\n\tconst len = Math.min(args.length, constraints.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tvalidateConstraint(args[i], constraints[i]);\n\t}\n}\n\nexport function validateConstraint(arg: unknown, constraint: TypeConstraint | undefined): void {\n\n\tif (isString(constraint)) {\n\t\tif (typeof arg !== constraint) {\n\t\t\tthrow new Error(`argument does not match constraint: typeof ${constraint}`);\n\t\t}\n\t} else if (isFunction(constraint)) {\n\t\ttry {\n\t\t\tif (arg instanceof constraint) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\tif (!isUndefinedOrNull(arg) && (arg as any).constructor === constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n\t}\n}\n\n/**\n * Helper type assertion that safely upcasts a type to a supertype.\n *\n * This can be used to make sure the argument correctly conforms to the subtype while still being able to pass it\n * to contexts that expects the supertype.\n */\nexport function upcast<Base, Sub extends Base = Base>(x: Sub): Base {\n\treturn x;\n}\n\n/**\n * Only picks the non-optional properties of a type.\n */\nexport type OmitOptional<T> = { [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K] };\n\n/**\n * A type that removed readonly-less from all properties of `T`\n */\nexport type Mutable<T> = {\n\t-readonly [P in keyof T]: T[P]\n};\n\n/**\n * Represents a type that is a partial version of a given type `T`, except a subset.\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;\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 { assert } from './assert.js';\n\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str: unknown): str is string {\n\treturn (typeof str === 'string');\n}\n\n/**\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj: unknown): obj is Object {\n\t// The method can't do a type cast since there are type (like strings) which\n\t// are subclasses of any put not positvely matched by the function. Hence type\n\t// narrowing results in wrong results.\n\treturn typeof obj === 'object'\n\t\t&& obj !== null\n\t\t&& !Array.isArray(obj)\n\t\t&& !(obj instanceof RegExp)\n\t\t&& !(obj instanceof Date);\n}\n\n/**\n * @returns whether the provided parameter is of type `Buffer` or Uint8Array dervived type\n */\nexport function isTypedArray(obj: unknown): obj is Object {\n\tconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\treturn typeof obj === 'object'\n\t\t&& obj instanceof TypedArray;\n}\n\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj: unknown): obj is number {\n\treturn (typeof obj === 'number' && !isNaN(obj));\n}\n\n/**\n * @returns whether the provided parameter is an Iterable, casting to the given generic\n */\nexport function isIterable<T>(obj: unknown): obj is Iterable<T> {\n\treturn !!obj && typeof (obj as any)[Symbol.iterator] === 'function';\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj: unknown): obj is boolean {\n\treturn (obj === true || obj === false);\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: unknown): obj is undefined {\n\treturn (typeof obj === 'undefined');\n}\n\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined<T>(arg: T | null | undefined): arg is T {\n\treturn !isUndefinedOrNull(arg);\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: unknown): obj is undefined | null {\n\treturn (isUndefined(obj) || obj === null);\n}\n\n\nexport function assertType(condition: unknown, type?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n\t}\n}\n\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n *\n * @see {@link assertDefined} for a similar utility that leverages TS assertion functions to narrow down the type of `arg` to be non-nullable.\n */\nexport function assertReturnsDefined<T>(arg: T | null | undefined): NonNullable<T> {\n\tassert(\n\t\targ !== null && arg !== undefined,\n\t\t'Argument is `undefined` or `null`.',\n\t);\n\n\treturn arg;\n}\n\n/**\n * Checks if the provided value is one of the vales in the provided list.\n *\n * ## Examples\n *\n * ```typescript\n * // note! item type is a `subset of string`\n * type TItem = ':' | '.' | '/';\n *\n * // note! item is type of `string` here\n * const item: string = ':';\n * // list of the items to check against\n * const list: TItem[] = [':', '.'];\n *\n * // ok\n * assert(\n * isOneOf(item, list),\n * 'Must succeed.',\n * );\n *\n * // `item` is of `TItem` type now\n * ```\n */\nexport const isOneOf = <TType, TSubtype extends TType>(\n\tvalue: TType,\n\tvalidValues: readonly TSubtype[],\n): value is TSubtype => {\n\t// note! it is OK to type cast here, because we rely on the includes\n\t// utility to check if the value is present in the provided list\n\treturn validValues.includes(<TSubtype>value);\n};\n\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj: unknown): obj is Function {\n\treturn (typeof obj === 'function');\n}\n\nexport type TypeConstraint = string | Function;\n\nexport function validateConstraints(args: unknown[], constraints: Array<TypeConstraint | undefined>): void {\n\tconst len = Math.min(args.length, constraints.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tvalidateConstraint(args[i], constraints[i]);\n\t}\n}\n\nexport function validateConstraint(arg: unknown, constraint: TypeConstraint | undefined): void {\n\n\tif (isString(constraint)) {\n\t\tif (typeof arg !== constraint) {\n\t\t\tthrow new Error(`argument does not match constraint: typeof ${constraint}`);\n\t\t}\n\t} else if (isFunction(constraint)) {\n\t\ttry {\n\t\t\tif (arg instanceof constraint) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\tif (!isUndefinedOrNull(arg) && (arg as any).constructor === constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n\t}\n}\n\n/**\n * Helper type assertion that safely upcasts a type to a supertype.\n *\n * This can be used to make sure the argument correctly conforms to the subtype while still being able to pass it\n * to contexts that expects the supertype.\n */\nexport function upcast<Base, Sub extends Base = Base>(x: Sub): Base {\n\treturn x;\n}\n\n/**\n * Only picks the non-optional properties of a type.\n */\nexport type OmitOptional<T> = { [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K] };\n\n/**\n * A type that removed readonly-less from all properties of `T`\n */\nexport type Mutable<T> = {\n\t-readonly [P in keyof T]: T[P]\n};\n\n/**\n * Represents a type that is a partial version of a given type `T`, except a subset.\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;\n"]}
1
+ {"version":3,"sources":["file:///mnt/vss/_work/1/s/dependencies/vscode/out-editor-src/vs/base/common/types.ts","vs/base/common/types.ts"],"names":[],"mappings":"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","file":"types.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 { assert } from './assert.js';\n\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str: unknown): str is string {\n\treturn (typeof str === 'string');\n}\n\n/**\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj: unknown): obj is Object {\n\t// The method can't do a type cast since there are type (like strings) which\n\t// are subclasses of any put not positvely matched by the function. Hence type\n\t// narrowing results in wrong results.\n\treturn typeof obj === 'object'\n\t\t&& obj !== null\n\t\t&& !Array.isArray(obj)\n\t\t&& !(obj instanceof RegExp)\n\t\t&& !(obj instanceof Date);\n}\n\n/**\n * @returns whether the provided parameter is of type `Buffer` or Uint8Array dervived type\n */\nexport function isTypedArray(obj: unknown): obj is Object {\n\tconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\treturn typeof obj === 'object'\n\t\t&& obj instanceof TypedArray;\n}\n\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj: unknown): obj is number {\n\treturn (typeof obj === 'number' && !isNaN(obj));\n}\n\n/**\n * @returns whether the provided parameter is an Iterable, casting to the given generic\n */\nexport function isIterable<T>(obj: unknown): obj is Iterable<T> {\n\t// eslint-disable-next-line local/code-no-any-casts\n\treturn !!obj && typeof (obj as any)[Symbol.iterator] === 'function';\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj: unknown): obj is boolean {\n\treturn (obj === true || obj === false);\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: unknown): obj is undefined {\n\treturn (typeof obj === 'undefined');\n}\n\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined<T>(arg: T | null | undefined): arg is T {\n\treturn !isUndefinedOrNull(arg);\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: unknown): obj is undefined | null {\n\treturn (isUndefined(obj) || obj === null);\n}\n\n\nexport function assertType(condition: unknown, type?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n\t}\n}\n\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n *\n * @see {@link assertDefined} for a similar utility that leverages TS assertion functions to narrow down the type of `arg` to be non-nullable.\n */\nexport function assertReturnsDefined<T>(arg: T | null | undefined): NonNullable<T> {\n\tassert(\n\t\targ !== null && arg !== undefined,\n\t\t'Argument is `undefined` or `null`.',\n\t);\n\n\treturn arg;\n}\n\n/**\n * Checks if the provided value is one of the vales in the provided list.\n *\n * ## Examples\n *\n * ```typescript\n * // note! item type is a `subset of string`\n * type TItem = ':' | '.' | '/';\n *\n * // note! item is type of `string` here\n * const item: string = ':';\n * // list of the items to check against\n * const list: TItem[] = [':', '.'];\n *\n * // ok\n * assert(\n * isOneOf(item, list),\n * 'Must succeed.',\n * );\n *\n * // `item` is of `TItem` type now\n * ```\n */\nexport const isOneOf = <TType, TSubtype extends TType>(\n\tvalue: TType,\n\tvalidValues: readonly TSubtype[],\n): value is TSubtype => {\n\t// note! it is OK to type cast here, because we rely on the includes\n\t// utility to check if the value is present in the provided list\n\treturn validValues.includes(<TSubtype>value);\n};\n\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj: unknown): obj is Function {\n\treturn (typeof obj === 'function');\n}\n\nexport type TypeConstraint = string | Function;\n\nexport function validateConstraints(args: unknown[], constraints: Array<TypeConstraint | undefined>): void {\n\tconst len = Math.min(args.length, constraints.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tvalidateConstraint(args[i], constraints[i]);\n\t}\n}\n\nexport function validateConstraint(arg: unknown, constraint: TypeConstraint | undefined): void {\n\n\tif (isString(constraint)) {\n\t\tif (typeof arg !== constraint) {\n\t\t\tthrow new Error(`argument does not match constraint: typeof ${constraint}`);\n\t\t}\n\t} else if (isFunction(constraint)) {\n\t\ttry {\n\t\t\tif (arg instanceof constraint) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tif (!isUndefinedOrNull(arg) && (arg as any).constructor === constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n\t}\n}\n\n/**\n * Helper type assertion that safely upcasts a type to a supertype.\n *\n * This can be used to make sure the argument correctly conforms to the subtype while still being able to pass it\n * to contexts that expects the supertype.\n */\nexport function upcast<Base, Sub extends Base = Base>(x: Sub): Base {\n\treturn x;\n}\n\n/**\n * Only picks the non-optional properties of a type.\n */\nexport type OmitOptional<T> = { [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K] };\n\n/**\n * A type that removed readonly-less from all properties of `T`\n */\nexport type Mutable<T> = {\n\t-readonly [P in keyof T]: T[P]\n};\n\n/**\n * Represents a type that is a partial version of a given type `T`, except a subset.\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;\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 { assert } from './assert.js';\n\n/**\n * @returns whether the provided parameter is a JavaScript String or not.\n */\nexport function isString(str: unknown): str is string {\n\treturn (typeof str === 'string');\n}\n\n/**\n * @returns whether the provided parameter is of type `object` but **not**\n *\t`null`, an `array`, a `regexp`, nor a `date`.\n */\nexport function isObject(obj: unknown): obj is Object {\n\t// The method can't do a type cast since there are type (like strings) which\n\t// are subclasses of any put not positvely matched by the function. Hence type\n\t// narrowing results in wrong results.\n\treturn typeof obj === 'object'\n\t\t&& obj !== null\n\t\t&& !Array.isArray(obj)\n\t\t&& !(obj instanceof RegExp)\n\t\t&& !(obj instanceof Date);\n}\n\n/**\n * @returns whether the provided parameter is of type `Buffer` or Uint8Array dervived type\n */\nexport function isTypedArray(obj: unknown): obj is Object {\n\tconst TypedArray = Object.getPrototypeOf(Uint8Array);\n\treturn typeof obj === 'object'\n\t\t&& obj instanceof TypedArray;\n}\n\n/**\n * In **contrast** to just checking `typeof` this will return `false` for `NaN`.\n * @returns whether the provided parameter is a JavaScript Number or not.\n */\nexport function isNumber(obj: unknown): obj is number {\n\treturn (typeof obj === 'number' && !isNaN(obj));\n}\n\n/**\n * @returns whether the provided parameter is an Iterable, casting to the given generic\n */\nexport function isIterable<T>(obj: unknown): obj is Iterable<T> {\n\t// eslint-disable-next-line local/code-no-any-casts\n\treturn !!obj && typeof (obj as any)[Symbol.iterator] === 'function';\n}\n\n/**\n * @returns whether the provided parameter is a JavaScript Boolean or not.\n */\nexport function isBoolean(obj: unknown): obj is boolean {\n\treturn (obj === true || obj === false);\n}\n\n/**\n * @returns whether the provided parameter is undefined.\n */\nexport function isUndefined(obj: unknown): obj is undefined {\n\treturn (typeof obj === 'undefined');\n}\n\n/**\n * @returns whether the provided parameter is defined.\n */\nexport function isDefined<T>(arg: T | null | undefined): arg is T {\n\treturn !isUndefinedOrNull(arg);\n}\n\n/**\n * @returns whether the provided parameter is undefined or null.\n */\nexport function isUndefinedOrNull(obj: unknown): obj is undefined | null {\n\treturn (isUndefined(obj) || obj === null);\n}\n\n\nexport function assertType(condition: unknown, type?: string): asserts condition {\n\tif (!condition) {\n\t\tthrow new Error(type ? `Unexpected type, expected '${type}'` : 'Unexpected type');\n\t}\n}\n\n/**\n * Asserts that the argument passed in is neither undefined nor null.\n *\n * @see {@link assertDefined} for a similar utility that leverages TS assertion functions to narrow down the type of `arg` to be non-nullable.\n */\nexport function assertReturnsDefined<T>(arg: T | null | undefined): NonNullable<T> {\n\tassert(\n\t\targ !== null && arg !== undefined,\n\t\t'Argument is `undefined` or `null`.',\n\t);\n\n\treturn arg;\n}\n\n/**\n * Checks if the provided value is one of the vales in the provided list.\n *\n * ## Examples\n *\n * ```typescript\n * // note! item type is a `subset of string`\n * type TItem = ':' | '.' | '/';\n *\n * // note! item is type of `string` here\n * const item: string = ':';\n * // list of the items to check against\n * const list: TItem[] = [':', '.'];\n *\n * // ok\n * assert(\n * isOneOf(item, list),\n * 'Must succeed.',\n * );\n *\n * // `item` is of `TItem` type now\n * ```\n */\nexport const isOneOf = <TType, TSubtype extends TType>(\n\tvalue: TType,\n\tvalidValues: readonly TSubtype[],\n): value is TSubtype => {\n\t// note! it is OK to type cast here, because we rely on the includes\n\t// utility to check if the value is present in the provided list\n\treturn validValues.includes(<TSubtype>value);\n};\n\n/**\n * @returns whether the provided parameter is a JavaScript Function or not.\n */\nexport function isFunction(obj: unknown): obj is Function {\n\treturn (typeof obj === 'function');\n}\n\nexport type TypeConstraint = string | Function;\n\nexport function validateConstraints(args: unknown[], constraints: Array<TypeConstraint | undefined>): void {\n\tconst len = Math.min(args.length, constraints.length);\n\tfor (let i = 0; i < len; i++) {\n\t\tvalidateConstraint(args[i], constraints[i]);\n\t}\n}\n\nexport function validateConstraint(arg: unknown, constraint: TypeConstraint | undefined): void {\n\n\tif (isString(constraint)) {\n\t\tif (typeof arg !== constraint) {\n\t\t\tthrow new Error(`argument does not match constraint: typeof ${constraint}`);\n\t\t}\n\t} else if (isFunction(constraint)) {\n\t\ttry {\n\t\t\tif (arg instanceof constraint) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t\t// eslint-disable-next-line local/code-no-any-casts\n\t\tif (!isUndefinedOrNull(arg) && (arg as any).constructor === constraint) {\n\t\t\treturn;\n\t\t}\n\t\tif (constraint.length === 1 && constraint.call(undefined, arg) === true) {\n\t\t\treturn;\n\t\t}\n\t\tthrow new Error(`argument does not match one of these constraints: arg instanceof constraint, arg.constructor === constraint, nor constraint(arg) === true`);\n\t}\n}\n\n/**\n * Helper type assertion that safely upcasts a type to a supertype.\n *\n * This can be used to make sure the argument correctly conforms to the subtype while still being able to pass it\n * to contexts that expects the supertype.\n */\nexport function upcast<Base, Sub extends Base = Base>(x: Sub): Base {\n\treturn x;\n}\n\n/**\n * Only picks the non-optional properties of a type.\n */\nexport type OmitOptional<T> = { [K in keyof T as T[K] extends Required<T>[K] ? K : never]: T[K] };\n\n/**\n * A type that removed readonly-less from all properties of `T`\n */\nexport type Mutable<T> = {\n\t-readonly [P in keyof T]: T[P]\n};\n\n/**\n * Represents a type that is a partial version of a given type `T`, except a subset.\n */\nexport type PartialExcept<T, K extends keyof T> = Partial<Omit<T, K>> & Pick<T, K>;\n"]}