groove-dev 0.16.1 → 0.16.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/node_modules/@groove-dev/daemon/src/index.js +25 -7
  2. package/node_modules/@groove-dev/daemon/src/terminal-pty.js +129 -0
  3. package/node_modules/@groove-dev/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
  4. package/node_modules/@groove-dev/gui/dist/assets/index-DeXW9EFU.js +153 -0
  5. package/node_modules/@groove-dev/gui/dist/index.html +2 -2
  6. package/node_modules/@groove-dev/gui/package.json +3 -0
  7. package/node_modules/@groove-dev/gui/src/components/EditorTabs.jsx +1 -1
  8. package/node_modules/@groove-dev/gui/src/components/FileTree.jsx +0 -14
  9. package/node_modules/@groove-dev/gui/src/components/Terminal.jsx +154 -0
  10. package/node_modules/@groove-dev/gui/src/views/FileEditor.jsx +100 -39
  11. package/node_modules/@xterm/addon-fit/LICENSE +19 -0
  12. package/node_modules/@xterm/addon-fit/README.md +24 -0
  13. package/node_modules/@xterm/addon-fit/lib/addon-fit.js +2 -0
  14. package/node_modules/@xterm/addon-fit/lib/addon-fit.js.map +1 -0
  15. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs +18 -0
  16. package/node_modules/@xterm/addon-fit/lib/addon-fit.mjs.map +7 -0
  17. package/node_modules/@xterm/addon-fit/package.json +26 -0
  18. package/node_modules/@xterm/addon-fit/src/FitAddon.ts +92 -0
  19. package/node_modules/@xterm/addon-fit/typings/addon-fit.d.ts +55 -0
  20. package/node_modules/@xterm/addon-web-links/LICENSE +19 -0
  21. package/node_modules/@xterm/addon-web-links/README.md +21 -0
  22. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js +2 -0
  23. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.js.map +1 -0
  24. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs +18 -0
  25. package/node_modules/@xterm/addon-web-links/lib/addon-web-links.mjs.map +7 -0
  26. package/node_modules/@xterm/addon-web-links/package.json +26 -0
  27. package/node_modules/@xterm/addon-web-links/src/WebLinkProvider.ts +199 -0
  28. package/node_modules/@xterm/addon-web-links/src/WebLinksAddon.ts +58 -0
  29. package/node_modules/@xterm/addon-web-links/typings/addon-web-links.d.ts +57 -0
  30. package/node_modules/@xterm/xterm/LICENSE +21 -0
  31. package/node_modules/@xterm/xterm/README.md +243 -0
  32. package/node_modules/@xterm/xterm/css/xterm.css +285 -0
  33. package/node_modules/@xterm/xterm/lib/xterm.js +2 -0
  34. package/node_modules/@xterm/xterm/lib/xterm.js.map +1 -0
  35. package/node_modules/@xterm/xterm/lib/xterm.mjs +53 -0
  36. package/node_modules/@xterm/xterm/lib/xterm.mjs.map +7 -0
  37. package/node_modules/@xterm/xterm/package.json +111 -0
  38. package/node_modules/@xterm/xterm/src/browser/AccessibilityManager.ts +435 -0
  39. package/node_modules/@xterm/xterm/src/browser/Clipboard.ts +93 -0
  40. package/node_modules/@xterm/xterm/src/browser/ColorContrastCache.ts +34 -0
  41. package/node_modules/@xterm/xterm/src/browser/CoreBrowserTerminal.ts +1339 -0
  42. package/node_modules/@xterm/xterm/src/browser/Linkifier.ts +403 -0
  43. package/node_modules/@xterm/xterm/src/browser/LocalizableStrings.ts +23 -0
  44. package/node_modules/@xterm/xterm/src/browser/OscLinkProvider.ts +129 -0
  45. package/node_modules/@xterm/xterm/src/browser/RenderDebouncer.ts +84 -0
  46. package/node_modules/@xterm/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  47. package/node_modules/@xterm/xterm/src/browser/Types.ts +226 -0
  48. package/node_modules/@xterm/xterm/src/browser/Viewport.ts +192 -0
  49. package/node_modules/@xterm/xterm/src/browser/decorations/BufferDecorationRenderer.ts +139 -0
  50. package/node_modules/@xterm/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  51. package/node_modules/@xterm/xterm/src/browser/decorations/OverviewRulerRenderer.ts +214 -0
  52. package/node_modules/@xterm/xterm/src/browser/input/CompositionHelper.ts +248 -0
  53. package/node_modules/@xterm/xterm/src/browser/input/Mouse.ts +54 -0
  54. package/node_modules/@xterm/xterm/src/browser/input/MoveToCell.ts +251 -0
  55. package/node_modules/@xterm/xterm/src/browser/public/Terminal.ts +275 -0
  56. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRenderer.ts +542 -0
  57. package/node_modules/@xterm/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +546 -0
  58. package/node_modules/@xterm/xterm/src/browser/renderer/dom/WidthCache.ts +167 -0
  59. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Constants.ts +6 -0
  60. package/node_modules/@xterm/xterm/src/browser/renderer/shared/RendererUtils.ts +95 -0
  61. package/node_modules/@xterm/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +93 -0
  62. package/node_modules/@xterm/xterm/src/browser/renderer/shared/Types.ts +84 -0
  63. package/node_modules/@xterm/xterm/src/browser/selection/SelectionModel.ts +144 -0
  64. package/node_modules/@xterm/xterm/src/browser/selection/Types.ts +15 -0
  65. package/node_modules/@xterm/xterm/src/browser/services/CharSizeService.ts +127 -0
  66. package/node_modules/@xterm/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  67. package/node_modules/@xterm/xterm/src/browser/services/CoreBrowserService.ts +137 -0
  68. package/node_modules/@xterm/xterm/src/browser/services/LinkProviderService.ts +28 -0
  69. package/node_modules/@xterm/xterm/src/browser/services/MouseService.ts +46 -0
  70. package/node_modules/@xterm/xterm/src/browser/services/RenderService.ts +376 -0
  71. package/node_modules/@xterm/xterm/src/browser/services/SelectionService.ts +1039 -0
  72. package/node_modules/@xterm/xterm/src/browser/services/Services.ts +158 -0
  73. package/node_modules/@xterm/xterm/src/browser/services/ThemeService.ts +198 -0
  74. package/node_modules/@xterm/xterm/src/browser/shared/Constants.ts +8 -0
  75. package/node_modules/@xterm/xterm/src/common/CircularList.ts +241 -0
  76. package/node_modules/@xterm/xterm/src/common/Clone.ts +23 -0
  77. package/node_modules/@xterm/xterm/src/common/Color.ts +376 -0
  78. package/node_modules/@xterm/xterm/src/common/CoreTerminal.ts +283 -0
  79. package/node_modules/@xterm/xterm/src/common/InputHandler.ts +3495 -0
  80. package/node_modules/@xterm/xterm/src/common/MultiKeyMap.ts +42 -0
  81. package/node_modules/@xterm/xterm/src/common/Platform.ts +44 -0
  82. package/node_modules/@xterm/xterm/src/common/SortedList.ts +194 -0
  83. package/node_modules/@xterm/xterm/src/common/TaskQueue.ts +166 -0
  84. package/node_modules/@xterm/xterm/src/common/TypedArrayUtils.ts +17 -0
  85. package/node_modules/@xterm/xterm/src/common/Types.ts +552 -0
  86. package/node_modules/@xterm/xterm/src/common/WindowsMode.ts +27 -0
  87. package/node_modules/@xterm/xterm/src/common/buffer/AttributeData.ts +211 -0
  88. package/node_modules/@xterm/xterm/src/common/buffer/Buffer.ts +662 -0
  89. package/node_modules/@xterm/xterm/src/common/buffer/BufferLine.ts +551 -0
  90. package/node_modules/@xterm/xterm/src/common/buffer/BufferRange.ts +13 -0
  91. package/node_modules/@xterm/xterm/src/common/buffer/BufferReflow.ts +226 -0
  92. package/node_modules/@xterm/xterm/src/common/buffer/BufferSet.ts +134 -0
  93. package/node_modules/@xterm/xterm/src/common/buffer/CellData.ts +94 -0
  94. package/node_modules/@xterm/xterm/src/common/buffer/Constants.ts +157 -0
  95. package/node_modules/@xterm/xterm/src/common/buffer/Marker.ts +43 -0
  96. package/node_modules/@xterm/xterm/src/common/buffer/Types.ts +52 -0
  97. package/node_modules/@xterm/xterm/src/common/data/Charsets.ts +256 -0
  98. package/node_modules/@xterm/xterm/src/common/data/EscapeSequences.ts +153 -0
  99. package/node_modules/@xterm/xterm/src/common/input/Keyboard.ts +373 -0
  100. package/node_modules/@xterm/xterm/src/common/input/TextDecoder.ts +346 -0
  101. package/node_modules/@xterm/xterm/src/common/input/UnicodeV6.ts +145 -0
  102. package/node_modules/@xterm/xterm/src/common/input/WriteBuffer.ts +247 -0
  103. package/node_modules/@xterm/xterm/src/common/input/XParseColor.ts +80 -0
  104. package/node_modules/@xterm/xterm/src/common/parser/Constants.ts +58 -0
  105. package/node_modules/@xterm/xterm/src/common/parser/DcsParser.ts +192 -0
  106. package/node_modules/@xterm/xterm/src/common/parser/EscapeSequenceParser.ts +792 -0
  107. package/node_modules/@xterm/xterm/src/common/parser/OscParser.ts +238 -0
  108. package/node_modules/@xterm/xterm/src/common/parser/Params.ts +229 -0
  109. package/node_modules/@xterm/xterm/src/common/parser/Types.ts +275 -0
  110. package/node_modules/@xterm/xterm/src/common/public/AddonManager.ts +53 -0
  111. package/node_modules/@xterm/xterm/src/common/public/BufferApiView.ts +35 -0
  112. package/node_modules/@xterm/xterm/src/common/public/BufferLineApiView.ts +29 -0
  113. package/node_modules/@xterm/xterm/src/common/public/BufferNamespaceApi.ts +36 -0
  114. package/node_modules/@xterm/xterm/src/common/public/ParserApi.ts +37 -0
  115. package/node_modules/@xterm/xterm/src/common/public/UnicodeApi.ts +27 -0
  116. package/node_modules/@xterm/xterm/src/common/services/BufferService.ts +154 -0
  117. package/node_modules/@xterm/xterm/src/common/services/CharsetService.ts +34 -0
  118. package/node_modules/@xterm/xterm/src/common/services/CoreMouseService.ts +365 -0
  119. package/node_modules/@xterm/xterm/src/common/services/CoreService.ts +92 -0
  120. package/node_modules/@xterm/xterm/src/common/services/DecorationService.ts +140 -0
  121. package/node_modules/@xterm/xterm/src/common/services/InstantiationService.ts +85 -0
  122. package/node_modules/@xterm/xterm/src/common/services/LogService.ts +124 -0
  123. package/node_modules/@xterm/xterm/src/common/services/OptionsService.ts +212 -0
  124. package/node_modules/@xterm/xterm/src/common/services/OscLinkService.ts +115 -0
  125. package/node_modules/@xterm/xterm/src/common/services/ServiceRegistry.ts +49 -0
  126. package/node_modules/@xterm/xterm/src/common/services/Services.ts +396 -0
  127. package/node_modules/@xterm/xterm/src/common/services/UnicodeService.ts +111 -0
  128. package/node_modules/@xterm/xterm/src/vs/base/browser/browser.ts +141 -0
  129. package/node_modules/@xterm/xterm/src/vs/base/browser/canIUse.ts +49 -0
  130. package/node_modules/@xterm/xterm/src/vs/base/browser/dom.ts +2369 -0
  131. package/node_modules/@xterm/xterm/src/vs/base/browser/fastDomNode.ts +316 -0
  132. package/node_modules/@xterm/xterm/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  133. package/node_modules/@xterm/xterm/src/vs/base/browser/iframe.ts +135 -0
  134. package/node_modules/@xterm/xterm/src/vs/base/browser/keyboardEvent.ts +213 -0
  135. package/node_modules/@xterm/xterm/src/vs/base/browser/mouseEvent.ts +229 -0
  136. package/node_modules/@xterm/xterm/src/vs/base/browser/touch.ts +372 -0
  137. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  138. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  139. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
  140. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  141. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  142. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  143. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  144. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  145. package/node_modules/@xterm/xterm/src/vs/base/browser/ui/widget.ts +57 -0
  146. package/node_modules/@xterm/xterm/src/vs/base/browser/window.ts +14 -0
  147. package/node_modules/@xterm/xterm/src/vs/base/common/arrays.ts +887 -0
  148. package/node_modules/@xterm/xterm/src/vs/base/common/arraysFind.ts +202 -0
  149. package/node_modules/@xterm/xterm/src/vs/base/common/assert.ts +71 -0
  150. package/node_modules/@xterm/xterm/src/vs/base/common/async.ts +1992 -0
  151. package/node_modules/@xterm/xterm/src/vs/base/common/cancellation.ts +148 -0
  152. package/node_modules/@xterm/xterm/src/vs/base/common/charCode.ts +450 -0
  153. package/node_modules/@xterm/xterm/src/vs/base/common/collections.ts +140 -0
  154. package/node_modules/@xterm/xterm/src/vs/base/common/decorators.ts +130 -0
  155. package/node_modules/@xterm/xterm/src/vs/base/common/equals.ts +146 -0
  156. package/node_modules/@xterm/xterm/src/vs/base/common/errors.ts +303 -0
  157. package/node_modules/@xterm/xterm/src/vs/base/common/event.ts +1778 -0
  158. package/node_modules/@xterm/xterm/src/vs/base/common/functional.ts +32 -0
  159. package/node_modules/@xterm/xterm/src/vs/base/common/hash.ts +316 -0
  160. package/node_modules/@xterm/xterm/src/vs/base/common/iterator.ts +159 -0
  161. package/node_modules/@xterm/xterm/src/vs/base/common/keyCodes.ts +526 -0
  162. package/node_modules/@xterm/xterm/src/vs/base/common/keybindings.ts +284 -0
  163. package/node_modules/@xterm/xterm/src/vs/base/common/lazy.ts +47 -0
  164. package/node_modules/@xterm/xterm/src/vs/base/common/lifecycle.ts +801 -0
  165. package/node_modules/@xterm/xterm/src/vs/base/common/linkedList.ts +142 -0
  166. package/node_modules/@xterm/xterm/src/vs/base/common/map.ts +202 -0
  167. package/node_modules/@xterm/xterm/src/vs/base/common/numbers.ts +98 -0
  168. package/node_modules/@xterm/xterm/src/vs/base/common/observable.ts +76 -0
  169. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/api.ts +31 -0
  170. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/autorun.ts +281 -0
  171. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/base.ts +489 -0
  172. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/debugName.ts +145 -0
  173. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/derived.ts +428 -0
  174. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  175. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/logging.ts +328 -0
  176. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/promise.ts +209 -0
  177. package/node_modules/@xterm/xterm/src/vs/base/common/observableInternal/utils.ts +610 -0
  178. package/node_modules/@xterm/xterm/src/vs/base/common/platform.ts +281 -0
  179. package/node_modules/@xterm/xterm/src/vs/base/common/scrollable.ts +522 -0
  180. package/node_modules/@xterm/xterm/src/vs/base/common/sequence.ts +34 -0
  181. package/node_modules/@xterm/xterm/src/vs/base/common/stopwatch.ts +43 -0
  182. package/node_modules/@xterm/xterm/src/vs/base/common/strings.ts +557 -0
  183. package/node_modules/@xterm/xterm/src/vs/base/common/symbols.ts +9 -0
  184. package/node_modules/@xterm/xterm/src/vs/base/common/uint.ts +59 -0
  185. package/node_modules/@xterm/xterm/src/vs/patches/nls.ts +90 -0
  186. package/node_modules/@xterm/xterm/src/vs/typings/base-common.d.ts +20 -0
  187. package/node_modules/@xterm/xterm/src/vs/typings/require.d.ts +42 -0
  188. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  189. package/node_modules/@xterm/xterm/src/vs/typings/vscode-globals-product.d.ts +33 -0
  190. package/node_modules/@xterm/xterm/typings/xterm.d.ts +1957 -0
  191. package/package.json +1 -1
  192. package/packages/daemon/src/index.js +25 -7
  193. package/packages/daemon/src/terminal-pty.js +129 -0
  194. package/packages/gui/dist/assets/{index-Gfb8Zxy9.css → index-BhjOFLBc.css} +32 -1
  195. package/packages/gui/dist/assets/index-DeXW9EFU.js +153 -0
  196. package/packages/gui/dist/index.html +2 -2
  197. package/packages/gui/package.json +3 -0
  198. package/packages/gui/src/components/EditorTabs.jsx +1 -1
  199. package/packages/gui/src/components/FileTree.jsx +0 -14
  200. package/packages/gui/src/components/Terminal.jsx +154 -0
  201. package/packages/gui/src/views/FileEditor.jsx +100 -39
  202. package/node_modules/@groove-dev/gui/dist/assets/index-BQSznoq0.js +0 -103
  203. package/packages/gui/dist/assets/index-BQSznoq0.js +0 -103
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ export class TwoKeyMap<TFirst extends string | number, TSecond extends string | number, TValue> {
7
+ private _data: { [bg: string | number]: { [fg: string | number]: TValue | undefined } | undefined } = {};
8
+
9
+ public set(first: TFirst, second: TSecond, value: TValue): void {
10
+ if (!this._data[first]) {
11
+ this._data[first] = {};
12
+ }
13
+ this._data[first as string | number]![second] = value;
14
+ }
15
+
16
+ public get(first: TFirst, second: TSecond): TValue | undefined {
17
+ return this._data[first as string | number] ? this._data[first as string | number]![second] : undefined;
18
+ }
19
+
20
+ public clear(): void {
21
+ this._data = {};
22
+ }
23
+ }
24
+
25
+ export class FourKeyMap<TFirst extends string | number, TSecond extends string | number, TThird extends string | number, TFourth extends string | number, TValue> {
26
+ private _data: TwoKeyMap<TFirst, TSecond, TwoKeyMap<TThird, TFourth, TValue>> = new TwoKeyMap();
27
+
28
+ public set(first: TFirst, second: TSecond, third: TThird, fourth: TFourth, value: TValue): void {
29
+ if (!this._data.get(first, second)) {
30
+ this._data.set(first, second, new TwoKeyMap());
31
+ }
32
+ this._data.get(first, second)!.set(third, fourth, value);
33
+ }
34
+
35
+ public get(first: TFirst, second: TSecond, third: TThird, fourth: TFourth): TValue | undefined {
36
+ return this._data.get(first, second)?.get(third, fourth);
37
+ }
38
+
39
+ public clear(): void {
40
+ this._data.clear();
41
+ }
42
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Copyright (c) 2016 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ interface INavigator {
7
+ userAgent: string;
8
+ language: string;
9
+ platform: string;
10
+ }
11
+
12
+ // We're declaring a navigator global here as we expect it in all runtimes (node and browser), but
13
+ // we want this module to live in common.
14
+ declare const navigator: INavigator;
15
+ declare const process: unknown;
16
+
17
+ export const isNode = (typeof process !== 'undefined' && 'title' in (process as any)) ? true : false;
18
+ const userAgent = (isNode) ? 'node' : navigator.userAgent;
19
+ const platform = (isNode) ? 'node' : navigator.platform;
20
+
21
+ export const isFirefox = userAgent.includes('Firefox');
22
+ export const isLegacyEdge = userAgent.includes('Edge');
23
+ export const isSafari = /^((?!chrome|android).)*safari/i.test(userAgent);
24
+ export function getSafariVersion(): number {
25
+ if (!isSafari) {
26
+ return 0;
27
+ }
28
+ const majorVersion = userAgent.match(/Version\/(\d+)/);
29
+ if (majorVersion === null || majorVersion.length < 2) {
30
+ return 0;
31
+ }
32
+ return parseInt(majorVersion[1]);
33
+ }
34
+
35
+ // Find the users platform. We use this to interpret the meta key
36
+ // and ISO third level shifts.
37
+ // http://stackoverflow.com/q/19877924/577598
38
+ export const isMac = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'].includes(platform);
39
+ export const isIpad = platform === 'iPad';
40
+ export const isIphone = platform === 'iPhone';
41
+ export const isWindows = ['Windows', 'Win16', 'Win32', 'WinCE'].includes(platform);
42
+ export const isLinux = platform.indexOf('Linux') >= 0;
43
+ // Note that when this is true, isLinux will also be true.
44
+ export const isChromeOS = /\bCrOS\b/.test(userAgent);
@@ -0,0 +1,194 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { IdleTaskQueue } from 'common/TaskQueue';
7
+
8
+ // Work variables to avoid garbage collection.
9
+ let i = 0;
10
+
11
+ /**
12
+ * A generic list that is maintained in sorted order and allows values with duplicate keys. Deferred
13
+ * batch insertion and deletion is used to significantly reduce the time it takes to insert and
14
+ * delete a large amount of items in succession. This list is based on binary search and as such
15
+ * locating a key will take O(log n) amortized, this includes the by key iterator.
16
+ */
17
+ export class SortedList<T> {
18
+ private _array: T[] = [];
19
+
20
+ private readonly _insertedValues: T[] = [];
21
+ private readonly _flushInsertedTask = new IdleTaskQueue();
22
+ private _isFlushingInserted = false;
23
+
24
+ private readonly _deletedIndices: number[] = [];
25
+ private readonly _flushDeletedTask = new IdleTaskQueue();
26
+ private _isFlushingDeleted = false;
27
+
28
+ constructor(
29
+ private readonly _getKey: (value: T) => number
30
+ ) {
31
+ }
32
+
33
+ public clear(): void {
34
+ this._array.length = 0;
35
+ this._insertedValues.length = 0;
36
+ this._flushInsertedTask.clear();
37
+ this._isFlushingInserted = false;
38
+ this._deletedIndices.length = 0;
39
+ this._flushDeletedTask.clear();
40
+ this._isFlushingDeleted = false;
41
+ }
42
+
43
+ public insert(value: T): void {
44
+ this._flushCleanupDeleted();
45
+ if (this._insertedValues.length === 0) {
46
+ this._flushInsertedTask.enqueue(() => this._flushInserted());
47
+ }
48
+ this._insertedValues.push(value);
49
+ }
50
+
51
+ private _flushInserted(): void {
52
+ const sortedAddedValues = this._insertedValues.sort((a, b) => this._getKey(a) - this._getKey(b));
53
+ let sortedAddedValuesIndex = 0;
54
+ let arrayIndex = 0;
55
+
56
+ const newArray = new Array(this._array.length + this._insertedValues.length);
57
+
58
+ for (let newArrayIndex = 0; newArrayIndex < newArray.length; newArrayIndex++) {
59
+ if (arrayIndex >= this._array.length || this._getKey(sortedAddedValues[sortedAddedValuesIndex]) <= this._getKey(this._array[arrayIndex])) {
60
+ newArray[newArrayIndex] = sortedAddedValues[sortedAddedValuesIndex];
61
+ sortedAddedValuesIndex++;
62
+ } else {
63
+ newArray[newArrayIndex] = this._array[arrayIndex++];
64
+ }
65
+ }
66
+
67
+ this._array = newArray;
68
+ this._insertedValues.length = 0;
69
+ }
70
+
71
+ private _flushCleanupInserted(): void {
72
+ if (!this._isFlushingInserted && this._insertedValues.length > 0) {
73
+ this._flushInsertedTask.flush();
74
+ }
75
+ }
76
+
77
+ public delete(value: T): boolean {
78
+ this._flushCleanupInserted();
79
+ if (this._array.length === 0) {
80
+ return false;
81
+ }
82
+ const key = this._getKey(value);
83
+ if (key === undefined) {
84
+ return false;
85
+ }
86
+ i = this._search(key);
87
+ if (i === -1) {
88
+ return false;
89
+ }
90
+ if (this._getKey(this._array[i]) !== key) {
91
+ return false;
92
+ }
93
+ do {
94
+ if (this._array[i] === value) {
95
+ if (this._deletedIndices.length === 0) {
96
+ this._flushDeletedTask.enqueue(() => this._flushDeleted());
97
+ }
98
+ this._deletedIndices.push(i);
99
+ return true;
100
+ }
101
+ } while (++i < this._array.length && this._getKey(this._array[i]) === key);
102
+ return false;
103
+ }
104
+
105
+ private _flushDeleted(): void {
106
+ this._isFlushingDeleted = true;
107
+ const sortedDeletedIndices = this._deletedIndices.sort((a, b) => a - b);
108
+ let sortedDeletedIndicesIndex = 0;
109
+ const newArray = new Array(this._array.length - sortedDeletedIndices.length);
110
+ let newArrayIndex = 0;
111
+ for (let i = 0; i < this._array.length; i++) {
112
+ if (sortedDeletedIndices[sortedDeletedIndicesIndex] === i) {
113
+ sortedDeletedIndicesIndex++;
114
+ } else {
115
+ newArray[newArrayIndex++] = this._array[i];
116
+ }
117
+ }
118
+ this._array = newArray;
119
+ this._deletedIndices.length = 0;
120
+ this._isFlushingDeleted = false;
121
+ }
122
+
123
+ private _flushCleanupDeleted(): void {
124
+ if (!this._isFlushingDeleted && this._deletedIndices.length > 0) {
125
+ this._flushDeletedTask.flush();
126
+ }
127
+ }
128
+
129
+ public *getKeyIterator(key: number): IterableIterator<T> {
130
+ this._flushCleanupInserted();
131
+ this._flushCleanupDeleted();
132
+ if (this._array.length === 0) {
133
+ return;
134
+ }
135
+ i = this._search(key);
136
+ if (i < 0 || i >= this._array.length) {
137
+ return;
138
+ }
139
+ if (this._getKey(this._array[i]) !== key) {
140
+ return;
141
+ }
142
+ do {
143
+ yield this._array[i];
144
+ } while (++i < this._array.length && this._getKey(this._array[i]) === key);
145
+ }
146
+
147
+ public forEachByKey(key: number, callback: (value: T) => void): void {
148
+ this._flushCleanupInserted();
149
+ this._flushCleanupDeleted();
150
+ if (this._array.length === 0) {
151
+ return;
152
+ }
153
+ i = this._search(key);
154
+ if (i < 0 || i >= this._array.length) {
155
+ return;
156
+ }
157
+ if (this._getKey(this._array[i]) !== key) {
158
+ return;
159
+ }
160
+ do {
161
+ callback(this._array[i]);
162
+ } while (++i < this._array.length && this._getKey(this._array[i]) === key);
163
+ }
164
+
165
+ public values(): IterableIterator<T> {
166
+ this._flushCleanupInserted();
167
+ this._flushCleanupDeleted();
168
+ // Duplicate the array to avoid issues when _array changes while iterating
169
+ return [...this._array].values();
170
+ }
171
+
172
+ private _search(key: number): number {
173
+ let min = 0;
174
+ let max = this._array.length - 1;
175
+ while (max >= min) {
176
+ let mid = (min + max) >> 1;
177
+ const midKey = this._getKey(this._array[mid]);
178
+ if (midKey > key) {
179
+ max = mid - 1;
180
+ } else if (midKey < key) {
181
+ min = mid + 1;
182
+ } else {
183
+ // key in list, walk to lowest duplicate
184
+ while (mid > 0 && this._getKey(this._array[mid - 1]) === key) {
185
+ mid--;
186
+ }
187
+ return mid;
188
+ }
189
+ }
190
+ // key not in list
191
+ // still return closest min (also used as insert position)
192
+ return min;
193
+ }
194
+ }
@@ -0,0 +1,166 @@
1
+ /**
2
+ * Copyright (c) 2022 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { isNode } from 'common/Platform';
7
+
8
+ interface ITaskQueue {
9
+ /**
10
+ * Adds a task to the queue which will run in a future idle callback.
11
+ * To avoid perceivable stalls on the mainthread, tasks with heavy workload
12
+ * should split their work into smaller pieces and return `true` to get
13
+ * called again until the work is done (on falsy return value).
14
+ */
15
+ enqueue(task: () => boolean | void): void;
16
+
17
+ /**
18
+ * Flushes the queue, running all remaining tasks synchronously.
19
+ */
20
+ flush(): void;
21
+
22
+ /**
23
+ * Clears any remaining tasks from the queue, these will not be run.
24
+ */
25
+ clear(): void;
26
+ }
27
+
28
+ interface ITaskDeadline {
29
+ timeRemaining(): number;
30
+ }
31
+ type CallbackWithDeadline = (deadline: ITaskDeadline) => void;
32
+
33
+ abstract class TaskQueue implements ITaskQueue {
34
+ private _tasks: (() => boolean | void)[] = [];
35
+ private _idleCallback?: number;
36
+ private _i = 0;
37
+
38
+ protected abstract _requestCallback(callback: CallbackWithDeadline): number;
39
+ protected abstract _cancelCallback(identifier: number): void;
40
+
41
+ public enqueue(task: () => boolean | void): void {
42
+ this._tasks.push(task);
43
+ this._start();
44
+ }
45
+
46
+ public flush(): void {
47
+ while (this._i < this._tasks.length) {
48
+ if (!this._tasks[this._i]()) {
49
+ this._i++;
50
+ }
51
+ }
52
+ this.clear();
53
+ }
54
+
55
+ public clear(): void {
56
+ if (this._idleCallback) {
57
+ this._cancelCallback(this._idleCallback);
58
+ this._idleCallback = undefined;
59
+ }
60
+ this._i = 0;
61
+ this._tasks.length = 0;
62
+ }
63
+
64
+ private _start(): void {
65
+ if (!this._idleCallback) {
66
+ this._idleCallback = this._requestCallback(this._process.bind(this));
67
+ }
68
+ }
69
+
70
+ private _process(deadline: ITaskDeadline): void {
71
+ this._idleCallback = undefined;
72
+ let taskDuration = 0;
73
+ let longestTask = 0;
74
+ let lastDeadlineRemaining = deadline.timeRemaining();
75
+ let deadlineRemaining = 0;
76
+ while (this._i < this._tasks.length) {
77
+ taskDuration = performance.now();
78
+ if (!this._tasks[this._i]()) {
79
+ this._i++;
80
+ }
81
+ // other than performance.now, performance.now might not be stable (changes on wall clock
82
+ // changes), this is not an issue here as a clock change during a short running task is very
83
+ // unlikely in case it still happened and leads to negative duration, simply assume 1 msec
84
+ taskDuration = Math.max(1, performance.now() - taskDuration);
85
+ longestTask = Math.max(taskDuration, longestTask);
86
+ // Guess the following task will take a similar time to the longest task in this batch, allow
87
+ // additional room to try avoid exceeding the deadline
88
+ deadlineRemaining = deadline.timeRemaining();
89
+ if (longestTask * 1.5 > deadlineRemaining) {
90
+ // Warn when the time exceeding the deadline is over 20ms, if this happens in practice the
91
+ // task should be split into sub-tasks to ensure the UI remains responsive.
92
+ if (lastDeadlineRemaining - taskDuration < -20) {
93
+ console.warn(`task queue exceeded allotted deadline by ${Math.abs(Math.round(lastDeadlineRemaining - taskDuration))}ms`);
94
+ }
95
+ this._start();
96
+ return;
97
+ }
98
+ lastDeadlineRemaining = deadlineRemaining;
99
+ }
100
+ this.clear();
101
+ }
102
+ }
103
+
104
+ /**
105
+ * A queue of that runs tasks over several tasks via setTimeout, trying to maintain above 60 frames
106
+ * per second. The tasks will run in the order they are enqueued, but they will run some time later,
107
+ * and care should be taken to ensure they're non-urgent and will not introduce race conditions.
108
+ */
109
+ export class PriorityTaskQueue extends TaskQueue {
110
+ protected _requestCallback(callback: CallbackWithDeadline): number {
111
+ return setTimeout(() => callback(this._createDeadline(16)));
112
+ }
113
+
114
+ protected _cancelCallback(identifier: number): void {
115
+ clearTimeout(identifier);
116
+ }
117
+
118
+ private _createDeadline(duration: number): ITaskDeadline {
119
+ const end = performance.now() + duration;
120
+ return {
121
+ timeRemaining: () => Math.max(0, end - performance.now())
122
+ };
123
+ }
124
+ }
125
+
126
+ class IdleTaskQueueInternal extends TaskQueue {
127
+ protected _requestCallback(callback: IdleRequestCallback): number {
128
+ return requestIdleCallback(callback);
129
+ }
130
+
131
+ protected _cancelCallback(identifier: number): void {
132
+ cancelIdleCallback(identifier);
133
+ }
134
+ }
135
+
136
+ /**
137
+ * A queue of that runs tasks over several idle callbacks, trying to respect the idle callback's
138
+ * deadline given by the environment. The tasks will run in the order they are enqueued, but they
139
+ * will run some time later, and care should be taken to ensure they're non-urgent and will not
140
+ * introduce race conditions.
141
+ *
142
+ * This reverts to a {@link PriorityTaskQueue} if the environment does not support idle callbacks.
143
+ */
144
+ // eslint-disable-next-line @typescript-eslint/naming-convention
145
+ export const IdleTaskQueue = (!isNode && 'requestIdleCallback' in window) ? IdleTaskQueueInternal : PriorityTaskQueue;
146
+
147
+ /**
148
+ * An object that tracks a single debounced task that will run on the next idle frame. When called
149
+ * multiple times, only the last set task will run.
150
+ */
151
+ export class DebouncedIdleTask {
152
+ private _queue: ITaskQueue;
153
+
154
+ constructor() {
155
+ this._queue = new IdleTaskQueue();
156
+ }
157
+
158
+ public set(task: () => boolean | void): void {
159
+ this._queue.clear();
160
+ this._queue.enqueue(task);
161
+ }
162
+
163
+ public flush(): void {
164
+ this._queue.flush();
165
+ }
166
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) 2018 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ export type TypedArray = Uint8Array | Uint16Array | Uint32Array | Uint8ClampedArray | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;
7
+
8
+ /**
9
+ * Concat two typed arrays `a` and `b`.
10
+ * Returns a new typed array.
11
+ */
12
+ export function concat<T extends TypedArray>(a: T, b: T): T {
13
+ const result = new (a.constructor as any)(a.length + b.length);
14
+ result.set(a);
15
+ result.set(b, a.length);
16
+ return result;
17
+ }