custom-electron-titlebar 3.2.6 → 3.2.10

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 (239) hide show
  1. package/.github/FUNDING.yml +1 -0
  2. package/README.md +15 -24
  3. package/_config.yml +1 -0
  4. package/{lib → build}/browser/browser.d.ts +0 -0
  5. package/{lib → build}/browser/browser.js +0 -0
  6. package/{lib → build}/browser/browser.js.map +0 -0
  7. package/{lib → build}/browser/event.d.ts +0 -0
  8. package/{lib → build}/browser/event.js +2 -1
  9. package/{lib → build}/browser/event.js.map +1 -1
  10. package/{lib → build}/browser/iframe.d.ts +0 -0
  11. package/{lib → build}/browser/iframe.js +0 -0
  12. package/{lib → build}/browser/iframe.js.map +0 -0
  13. package/{lib → build}/browser/keyboardEvent.d.ts +0 -0
  14. package/{lib → build}/browser/keyboardEvent.js +0 -0
  15. package/{lib → build}/browser/keyboardEvent.js.map +0 -0
  16. package/{lib → build}/browser/mouseEvent.d.ts +0 -0
  17. package/{lib → build}/browser/mouseEvent.js +0 -0
  18. package/{lib → build}/browser/mouseEvent.js.map +0 -0
  19. package/{lib → build}/common/arrays.d.ts +0 -0
  20. package/{lib → build}/common/arrays.js +0 -0
  21. package/{lib → build}/common/arrays.js.map +0 -0
  22. package/{lib → build}/common/async.d.ts +0 -0
  23. package/{lib → build}/common/async.js +0 -0
  24. package/{lib → build}/common/async.js.map +0 -0
  25. package/{lib → build}/common/charCode.d.ts +0 -0
  26. package/{lib → build}/common/charCode.js +0 -0
  27. package/{lib → build}/common/charCode.js.map +0 -0
  28. package/{lib → build}/common/color.d.ts +0 -0
  29. package/{lib → build}/common/color.js +0 -0
  30. package/{lib → build}/common/color.js.map +0 -0
  31. package/{lib → build}/common/dom.d.ts +0 -0
  32. package/{lib → build}/common/dom.js +16 -14
  33. package/build/common/dom.js.map +1 -0
  34. package/{lib → build}/common/event.d.ts +0 -0
  35. package/{lib → build}/common/event.js +1 -1
  36. package/build/common/event.js.map +1 -0
  37. package/{lib → build}/common/iterator.d.ts +0 -0
  38. package/{lib → build}/common/iterator.js +0 -0
  39. package/{lib → build}/common/iterator.js.map +0 -0
  40. package/{lib → build}/common/keyCodes.d.ts +0 -0
  41. package/{lib → build}/common/keyCodes.js +0 -0
  42. package/{lib → build}/common/keyCodes.js.map +0 -0
  43. package/{lib → build}/common/lifecycle.d.ts +0 -0
  44. package/{lib → build}/common/lifecycle.js +0 -0
  45. package/{lib → build}/common/lifecycle.js.map +0 -0
  46. package/{lib → build}/common/linkedList.d.ts +0 -0
  47. package/{lib → build}/common/linkedList.js +0 -0
  48. package/{lib → build}/common/linkedList.js.map +0 -0
  49. package/{lib → build}/common/platform.d.ts +0 -0
  50. package/{lib → build}/common/platform.js +0 -0
  51. package/{lib → build}/common/platform.js.map +0 -0
  52. package/{lib → build}/index.d.ts +0 -0
  53. package/{lib → build}/index.js +0 -0
  54. package/{lib → build}/index.js.map +0 -0
  55. package/{lib → build}/menu/menu.d.ts +0 -0
  56. package/{lib → build}/menu/menu.js +38 -38
  57. package/build/menu/menu.js.map +1 -0
  58. package/{lib → build}/menu/menuitem.d.ts +10 -2
  59. package/{lib → build}/menu/menuitem.js +70 -34
  60. package/build/menu/menuitem.js.map +1 -0
  61. package/{lib → build}/menubar.d.ts +0 -0
  62. package/{lib → build}/menubar.js +29 -30
  63. package/build/menubar.js.map +1 -0
  64. package/{lib → build}/themebar.d.ts +0 -0
  65. package/{lib → build}/themebar.js +2 -2
  66. package/build/themebar.js.map +1 -0
  67. package/{lib → build}/titlebar.d.ts +0 -0
  68. package/{lib → build}/titlebar.js +61 -58
  69. package/build/titlebar.js.map +1 -0
  70. package/package.json +13 -7
  71. package/lib/common/dom.js.map +0 -1
  72. package/lib/common/enableNativeMenuCommands.d.ts +0 -1
  73. package/lib/common/enableNativeMenuCommands.js +0 -32
  74. package/lib/common/enableNativeMenuCommands.js.map +0 -1
  75. package/lib/common/event.js.map +0 -1
  76. package/lib/main.d.ts +0 -1
  77. package/lib/main.js +0 -14
  78. package/lib/main.js.map +0 -1
  79. package/lib/menu/menu.js.map +0 -1
  80. package/lib/menu/menuitem.js.map +0 -1
  81. package/lib/menubar.js.map +0 -1
  82. package/lib/themebar.js.map +0 -1
  83. package/lib/titlebar.js.map +0 -1
  84. package/lib/vs/base/browser/browser.js +0 -150
  85. package/lib/vs/base/browser/canIUse.js +0 -58
  86. package/lib/vs/base/browser/codicons.js +0 -37
  87. package/lib/vs/base/browser/contextmenu.js +0 -9
  88. package/lib/vs/base/browser/dnd.js +0 -113
  89. package/lib/vs/base/browser/dom.js +0 -1417
  90. package/lib/vs/base/browser/event.js +0 -36
  91. package/lib/vs/base/browser/fastDomNode.js +0 -265
  92. package/lib/vs/base/browser/formattedTextRenderer.js +0 -248
  93. package/lib/vs/base/browser/globalMouseMoveMonitor.js +0 -137
  94. package/lib/vs/base/browser/history.js +0 -9
  95. package/lib/vs/base/browser/iframe.js +0 -126
  96. package/lib/vs/base/browser/keyboardEvent.js +0 -599
  97. package/lib/vs/base/browser/mouseEvent.js +0 -155
  98. package/lib/vs/base/browser/touch.js +0 -315
  99. package/lib/vs/base/browser/ui/actionbar/actionViewItems.js +0 -397
  100. package/lib/vs/base/browser/ui/actionbar/actionbar.js +0 -583
  101. package/lib/vs/base/browser/ui/checkbox/checkbox.js +0 -251
  102. package/lib/vs/base/browser/ui/codicons/codiconLabel.js +0 -31
  103. package/lib/vs/base/browser/ui/codicons/codiconStyles.js +0 -47
  104. package/lib/vs/base/browser/ui/contextview/contextview.js +0 -367
  105. package/lib/vs/base/browser/ui/dropdown/dropdown.js +0 -256
  106. package/lib/vs/base/browser/ui/dropdown/dropdownActionViewItem.js +0 -120
  107. package/lib/vs/base/browser/ui/keybindingLabel/keybindingLabel.js +0 -118
  108. package/lib/vs/base/browser/ui/list/list.js +0 -54
  109. package/lib/vs/base/browser/ui/list/listPaging.js +0 -322
  110. package/lib/vs/base/browser/ui/list/listView.js +0 -1388
  111. package/lib/vs/base/browser/ui/list/listWidget.js +0 -1709
  112. package/lib/vs/base/browser/ui/list/rangeMap.js +0 -223
  113. package/lib/vs/base/browser/ui/list/rowCache.js +0 -113
  114. package/lib/vs/base/browser/ui/list/splice.js +0 -23
  115. package/lib/vs/base/browser/ui/menu/menu.js +0 -1371
  116. package/lib/vs/base/browser/ui/menu/menubar.js +0 -1139
  117. package/lib/vs/base/browser/ui/scrollbar/abstractScrollbar.js +0 -278
  118. package/lib/vs/base/browser/ui/scrollbar/horizontalScrollbar.js +0 -115
  119. package/lib/vs/base/browser/ui/scrollbar/scrollableElement.js +0 -646
  120. package/lib/vs/base/browser/ui/scrollbar/scrollableElementOptions.js +0 -9
  121. package/lib/vs/base/browser/ui/scrollbar/scrollbarArrow.js +0 -106
  122. package/lib/vs/base/browser/ui/scrollbar/scrollbarState.js +0 -184
  123. package/lib/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.js +0 -116
  124. package/lib/vs/base/browser/ui/scrollbar/verticalScrollbar.js +0 -114
  125. package/lib/vs/base/browser/ui/selectBox/selectBox.js +0 -85
  126. package/lib/vs/base/browser/ui/selectBox/selectBoxCustom.js +0 -985
  127. package/lib/vs/base/browser/ui/selectBox/selectBoxNative.js +0 -188
  128. package/lib/vs/base/browser/ui/toolbar/toolbar.js +0 -206
  129. package/lib/vs/base/browser/ui/widget.js +0 -69
  130. package/lib/vs/base/common/actions.js +0 -224
  131. package/lib/vs/base/common/amd.js +0 -31
  132. package/lib/vs/base/common/arrays.js +0 -641
  133. package/lib/vs/base/common/assert.js +0 -21
  134. package/lib/vs/base/common/async.js +0 -966
  135. package/lib/vs/base/common/buffer.js +0 -250
  136. package/lib/vs/base/common/cache.js +0 -40
  137. package/lib/vs/base/common/cancellation.js +0 -146
  138. package/lib/vs/base/common/charCode.js +0 -9
  139. package/lib/vs/base/common/codicon.js +0 -136
  140. package/lib/vs/base/common/codicons.js +0 -1378
  141. package/lib/vs/base/common/collections.js +0 -133
  142. package/lib/vs/base/common/color.js +0 -716
  143. package/lib/vs/base/common/comparers.js +0 -280
  144. package/lib/vs/base/common/console.js +0 -142
  145. package/lib/vs/base/common/date.js +0 -113
  146. package/lib/vs/base/common/decorators.js +0 -169
  147. package/lib/vs/base/common/errorMessage.js +0 -93
  148. package/lib/vs/base/common/errors.js +0 -213
  149. package/lib/vs/base/common/errorsWithActions.js +0 -28
  150. package/lib/vs/base/common/event.js +0 -873
  151. package/lib/vs/base/common/extpath.js +0 -401
  152. package/lib/vs/base/common/filters.js +0 -948
  153. package/lib/vs/base/common/functional.js +0 -28
  154. package/lib/vs/base/common/fuzzyScorer.js +0 -811
  155. package/lib/vs/base/common/glob.js +0 -696
  156. package/lib/vs/base/common/hash.js +0 -359
  157. package/lib/vs/base/common/history.js +0 -116
  158. package/lib/vs/base/common/htmlContent.js +0 -162
  159. package/lib/vs/base/common/idGenerator.js +0 -25
  160. package/lib/vs/base/common/iterator.js +0 -118
  161. package/lib/vs/base/common/json.js +0 -1624
  162. package/lib/vs/base/common/jsonEdit.js +0 -272
  163. package/lib/vs/base/common/jsonErrorMessages.js +0 -69
  164. package/lib/vs/base/common/jsonFormatter.js +0 -316
  165. package/lib/vs/base/common/jsonSchema.js +0 -9
  166. package/lib/vs/base/common/keyCodes.js +0 -591
  167. package/lib/vs/base/common/keybindingLabels.js +0 -231
  168. package/lib/vs/base/common/keybindingParser.js +0 -142
  169. package/lib/vs/base/common/labels.js +0 -430
  170. package/lib/vs/base/common/lazy.js +0 -71
  171. package/lib/vs/base/common/lifecycle.js +0 -308
  172. package/lib/vs/base/common/linkedList.js +0 -152
  173. package/lib/vs/base/common/linkedText.js +0 -73
  174. package/lib/vs/base/common/map.js +0 -1108
  175. package/lib/vs/base/common/marshalling.js +0 -80
  176. package/lib/vs/base/common/mime.js +0 -321
  177. package/lib/vs/base/common/navigator.js +0 -50
  178. package/lib/vs/base/common/network.js +0 -160
  179. package/lib/vs/base/common/normalization.js +0 -78
  180. package/lib/vs/base/common/numbers.js +0 -55
  181. package/lib/vs/base/common/objects.js +0 -268
  182. package/lib/vs/base/common/paging.js +0 -190
  183. package/lib/vs/base/common/parsers.js +0 -78
  184. package/lib/vs/base/common/path.js +0 -1550
  185. package/lib/vs/base/common/platform.js +0 -245
  186. package/lib/vs/base/common/process.js +0 -52
  187. package/lib/vs/base/common/processes.js +0 -32
  188. package/lib/vs/base/common/range.js +0 -79
  189. package/lib/vs/base/common/resourceTree.js +0 -185
  190. package/lib/vs/base/common/resources.js +0 -421
  191. package/lib/vs/base/common/scanCode.js +0 -1472
  192. package/lib/vs/base/common/scrollable.js +0 -397
  193. package/lib/vs/base/common/search.js +0 -55
  194. package/lib/vs/base/common/sequence.js +0 -64
  195. package/lib/vs/base/common/severity.js +0 -55
  196. package/lib/vs/base/common/skipList.js +0 -234
  197. package/lib/vs/base/common/stopwatch.js +0 -45
  198. package/lib/vs/base/common/stream.js +0 -418
  199. package/lib/vs/base/common/strings.js +0 -1283
  200. package/lib/vs/base/common/styler.js +0 -9
  201. package/lib/vs/base/common/types.js +0 -296
  202. package/lib/vs/base/common/uint.js +0 -46
  203. package/lib/vs/base/common/uri.js +0 -756
  204. package/lib/vs/base/common/uriIpc.js +0 -154
  205. package/lib/vs/base/common/uuid.js +0 -70
  206. package/lib/vs/nls.mock.js +0 -31
  207. package/lib/vs/platform/actions/browser/menuEntryActionViewItem.js +0 -342
  208. package/lib/vs/platform/actions/common/actions.js +0 -456
  209. package/lib/vs/platform/actions/common/menuService.js +0 -194
  210. package/lib/vs/platform/clipboard/browser/clipboardService.js +0 -99
  211. package/lib/vs/platform/clipboard/common/clipboardService.js +0 -14
  212. package/lib/vs/platform/contextkey/common/contextkey.js +0 -1210
  213. package/lib/vs/platform/contextkey/common/contextkeys.js +0 -23
  214. package/lib/vs/platform/contextview/browser/contextView.js +0 -15
  215. package/lib/vs/platform/contextview/browser/contextViewService.js +0 -96
  216. package/lib/vs/platform/environment/common/argv.js +0 -9
  217. package/lib/vs/platform/environment/common/environment.js +0 -15
  218. package/lib/vs/platform/instantiation/common/descriptors.js +0 -25
  219. package/lib/vs/platform/instantiation/common/extensions.js +0 -26
  220. package/lib/vs/platform/instantiation/common/graph.js +0 -93
  221. package/lib/vs/platform/instantiation/common/instantiation.js +0 -84
  222. package/lib/vs/platform/instantiation/common/instantiationService.js +0 -361
  223. package/lib/vs/platform/instantiation/common/serviceCollection.js +0 -39
  224. package/lib/vs/platform/keybinding/common/baseResolvedKeybinding.js +0 -73
  225. package/lib/vs/platform/keybinding/common/keybinding.js +0 -14
  226. package/lib/vs/platform/keybinding/common/keybindingResolver.js +0 -391
  227. package/lib/vs/platform/keybinding/common/keybindingsRegistry.js +0 -229
  228. package/lib/vs/platform/keybinding/common/resolvedKeybindingItem.js +0 -47
  229. package/lib/vs/platform/keybinding/common/usLayoutResolvedKeybinding.js +0 -160
  230. package/lib/vs/platform/layout/browser/layoutService.js +0 -14
  231. package/lib/vs/platform/menubar/common/menubar.js +0 -34
  232. package/lib/vs/platform/registry/common/platform.js +0 -38
  233. package/lib/vs/platform/theme/browser/checkbox.js +0 -32
  234. package/lib/vs/platform/theme/common/colorRegistry.js +0 -1154
  235. package/lib/vs/platform/theme/common/styler.js +0 -290
  236. package/lib/vs/platform/theme/common/theme.js +0 -21
  237. package/lib/vs/platform/theme/common/themeService.js +0 -176
  238. package/lib/vs/platform/theme/common/tokenClassificationRegistry.js +0 -540
  239. package/lib/vs/platform/theme/test/common/testThemeService.js +0 -98
@@ -1,234 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the MIT License. See License.txt in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.SkipList = void 0;
11
-
12
- class Node {
13
- constructor(level, key, value) {
14
- this.level = level;
15
- this.key = key;
16
- this.value = value;
17
- this.forward = [];
18
- }
19
-
20
- }
21
-
22
- const NIL = undefined;
23
-
24
- class SkipList {
25
- /**
26
- *
27
- * @param capacity Capacity at which the list performs best
28
- */
29
- constructor(comparator, capacity = 2 ** 16) {
30
- this.comparator = comparator;
31
- this[Symbol.toStringTag] = 'SkipList';
32
- this._level = 0;
33
- this._size = 0;
34
- this._maxLevel = Math.max(1, Math.log2(capacity) | 0);
35
- this._header = new Node(this._maxLevel, NIL, NIL);
36
- }
37
-
38
- get size() {
39
- return this._size;
40
- }
41
-
42
- clear() {
43
- this._header = new Node(this._maxLevel, NIL, NIL);
44
- }
45
-
46
- has(key) {
47
- return Boolean(SkipList._search(this, key, this.comparator));
48
- }
49
-
50
- get(key) {
51
- var _a;
52
-
53
- return (_a = SkipList._search(this, key, this.comparator)) === null || _a === void 0 ? void 0 : _a.value;
54
- }
55
-
56
- set(key, value) {
57
- if (SkipList._insert(this, key, value, this.comparator)) {
58
- this._size += 1;
59
- }
60
-
61
- return this;
62
- }
63
-
64
- delete(key) {
65
- const didDelete = SkipList._delete(this, key, this.comparator);
66
-
67
- if (didDelete) {
68
- this._size -= 1;
69
- }
70
-
71
- return didDelete;
72
- } // --- iteration
73
-
74
-
75
- forEach(callbackfn, thisArg) {
76
- let node = this._header.forward[0];
77
-
78
- while (node) {
79
- callbackfn.call(thisArg, node.value, node.key, this);
80
- node = node.forward[0];
81
- }
82
- }
83
-
84
- [Symbol.iterator]() {
85
- return this.entries();
86
- }
87
-
88
- *entries() {
89
- let node = this._header.forward[0];
90
-
91
- while (node) {
92
- yield [node.key, node.value];
93
- node = node.forward[0];
94
- }
95
- }
96
-
97
- *keys() {
98
- let node = this._header.forward[0];
99
-
100
- while (node) {
101
- yield node.key;
102
- node = node.forward[0];
103
- }
104
- }
105
-
106
- *values() {
107
- let node = this._header.forward[0];
108
-
109
- while (node) {
110
- yield node.value;
111
- node = node.forward[0];
112
- }
113
- }
114
-
115
- toString() {
116
- // debug string...
117
- let result = '[SkipList]:';
118
- let node = this._header.forward[0];
119
-
120
- while (node) {
121
- result += `node(${node.key}, ${node.value}, lvl:${node.level})`;
122
- node = node.forward[0];
123
- }
124
-
125
- return result;
126
- } // from https://www.epaperpress.com/sortsearch/download/skiplist.pdf
127
-
128
-
129
- static _search(list, searchKey, comparator) {
130
- let x = list._header;
131
-
132
- for (let i = list._level - 1; i >= 0; i--) {
133
- while (x.forward[i] && comparator(x.forward[i].key, searchKey) < 0) {
134
- x = x.forward[i];
135
- }
136
- }
137
-
138
- x = x.forward[0];
139
-
140
- if (x && comparator(x.key, searchKey) === 0) {
141
- return x;
142
- }
143
-
144
- return undefined;
145
- }
146
-
147
- static _insert(list, searchKey, value, comparator) {
148
- let update = [];
149
- let x = list._header;
150
-
151
- for (let i = list._level - 1; i >= 0; i--) {
152
- while (x.forward[i] && comparator(x.forward[i].key, searchKey) < 0) {
153
- x = x.forward[i];
154
- }
155
-
156
- update[i] = x;
157
- }
158
-
159
- x = x.forward[0];
160
-
161
- if (x && comparator(x.key, searchKey) === 0) {
162
- // update
163
- x.value = value;
164
- return false;
165
- } else {
166
- // insert
167
- let lvl = SkipList._randomLevel(list);
168
-
169
- if (lvl > list._level) {
170
- for (let i = list._level; i < lvl; i++) {
171
- update[i] = list._header;
172
- }
173
-
174
- list._level = lvl;
175
- }
176
-
177
- x = new Node(lvl, searchKey, value);
178
-
179
- for (let i = 0; i < lvl; i++) {
180
- x.forward[i] = update[i].forward[i];
181
- update[i].forward[i] = x;
182
- }
183
-
184
- return true;
185
- }
186
- }
187
-
188
- static _randomLevel(list, p = 0.5) {
189
- let lvl = 1;
190
-
191
- while (Math.random() < p && lvl < list._maxLevel) {
192
- lvl += 1;
193
- }
194
-
195
- return lvl;
196
- }
197
-
198
- static _delete(list, searchKey, comparator) {
199
- let update = [];
200
- let x = list._header;
201
-
202
- for (let i = list._level - 1; i >= 0; i--) {
203
- while (x.forward[i] && comparator(x.forward[i].key, searchKey) < 0) {
204
- x = x.forward[i];
205
- }
206
-
207
- update[i] = x;
208
- }
209
-
210
- x = x.forward[0];
211
-
212
- if (!x || comparator(x.key, searchKey) !== 0) {
213
- // not found
214
- return false;
215
- }
216
-
217
- for (let i = 0; i < list._level; i++) {
218
- if (update[i].forward[i] !== x) {
219
- break;
220
- }
221
-
222
- update[i].forward[i] = x.forward[i];
223
- }
224
-
225
- while (list._level > 0 && list._header.forward[list._level - 1] === NIL) {
226
- list._level -= 1;
227
- }
228
-
229
- return true;
230
- }
231
-
232
- }
233
-
234
- exports.SkipList = SkipList;
@@ -1,45 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the MIT License. See License.txt in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.StopWatch = void 0;
11
-
12
- const platform_1 = require("./platform");
13
-
14
- const hasPerformanceNow = platform_1.globals.performance && typeof platform_1.globals.performance.now === 'function';
15
-
16
- class StopWatch {
17
- constructor(highResolution) {
18
- this._highResolution = hasPerformanceNow && highResolution;
19
- this._startTime = this._now();
20
- this._stopTime = -1;
21
- }
22
-
23
- static create(highResolution = true) {
24
- return new StopWatch(highResolution);
25
- }
26
-
27
- stop() {
28
- this._stopTime = this._now();
29
- }
30
-
31
- elapsed() {
32
- if (this._stopTime !== -1) {
33
- return this._stopTime - this._startTime;
34
- }
35
-
36
- return this._now() - this._startTime;
37
- }
38
-
39
- _now() {
40
- return this._highResolution ? platform_1.globals.performance.now() : new Date().getTime();
41
- }
42
-
43
- }
44
-
45
- exports.StopWatch = StopWatch;
@@ -1,418 +0,0 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Microsoft Corporation. All rights reserved.
4
- * Licensed under the MIT License. See License.txt in the project root for license information.
5
- *--------------------------------------------------------------------------------------------*/
6
-
7
- Object.defineProperty(exports, "__esModule", {
8
- value: true
9
- });
10
- exports.transform = exports.toReadable = exports.toStream = exports.peekStream = exports.consumeStream = exports.peekReadable = exports.consumeReadable = exports.newWriteableStream = exports.isReadableBufferedStream = exports.isReadableStream = void 0;
11
-
12
- const lifecycle_1 = require("./lifecycle");
13
-
14
- function isReadableStream(obj) {
15
- const candidate = obj;
16
- return candidate && [candidate.on, candidate.pause, candidate.resume, candidate.destroy].every(fn => typeof fn === 'function');
17
- }
18
-
19
- exports.isReadableStream = isReadableStream;
20
-
21
- function isReadableBufferedStream(obj) {
22
- const candidate = obj;
23
- return candidate && isReadableStream(candidate.stream) && Array.isArray(candidate.buffer) && typeof candidate.ended === 'boolean';
24
- }
25
-
26
- exports.isReadableBufferedStream = isReadableBufferedStream;
27
-
28
- function newWriteableStream(reducer, options) {
29
- return new WriteableStreamImpl(reducer, options);
30
- }
31
-
32
- exports.newWriteableStream = newWriteableStream;
33
-
34
- class WriteableStreamImpl {
35
- constructor(reducer, options) {
36
- this.reducer = reducer;
37
- this.options = options;
38
- this.state = {
39
- flowing: false,
40
- ended: false,
41
- destroyed: false
42
- };
43
- this.buffer = {
44
- data: [],
45
- error: []
46
- };
47
- this.listeners = {
48
- data: [],
49
- error: [],
50
- end: []
51
- };
52
- this.pendingWritePromises = [];
53
- }
54
-
55
- pause() {
56
- if (this.state.destroyed) {
57
- return;
58
- }
59
-
60
- this.state.flowing = false;
61
- }
62
-
63
- resume() {
64
- if (this.state.destroyed) {
65
- return;
66
- }
67
-
68
- if (!this.state.flowing) {
69
- this.state.flowing = true; // emit buffered events
70
-
71
- this.flowData();
72
- this.flowErrors();
73
- this.flowEnd();
74
- }
75
- }
76
-
77
- write(data) {
78
- var _a;
79
-
80
- if (this.state.destroyed) {
81
- return;
82
- } // flowing: directly send the data to listeners
83
-
84
-
85
- if (this.state.flowing) {
86
- this.listeners.data.forEach(listener => listener(data));
87
- } // not yet flowing: buffer data until flowing
88
- else {
89
- this.buffer.data.push(data); // highWaterMark: if configured, signal back when buffer reached limits
90
-
91
- if (typeof ((_a = this.options) === null || _a === void 0 ? void 0 : _a.highWaterMark) === 'number' && this.buffer.data.length > this.options.highWaterMark) {
92
- return new Promise(resolve => this.pendingWritePromises.push(resolve));
93
- }
94
- }
95
- }
96
-
97
- error(error) {
98
- if (this.state.destroyed) {
99
- return;
100
- } // flowing: directly send the error to listeners
101
-
102
-
103
- if (this.state.flowing) {
104
- this.listeners.error.forEach(listener => listener(error));
105
- } // not yet flowing: buffer errors until flowing
106
- else {
107
- this.buffer.error.push(error);
108
- }
109
- }
110
-
111
- end(result) {
112
- if (this.state.destroyed) {
113
- return;
114
- } // end with data or error if provided
115
-
116
-
117
- if (result instanceof Error) {
118
- this.error(result);
119
- } else if (result) {
120
- this.write(result);
121
- } // flowing: send end event to listeners
122
-
123
-
124
- if (this.state.flowing) {
125
- this.listeners.end.forEach(listener => listener());
126
- this.destroy();
127
- } // not yet flowing: remember state
128
- else {
129
- this.state.ended = true;
130
- }
131
- }
132
-
133
- on(event, callback) {
134
- if (this.state.destroyed) {
135
- return;
136
- }
137
-
138
- switch (event) {
139
- case 'data':
140
- this.listeners.data.push(callback); // switch into flowing mode as soon as the first 'data'
141
- // listener is added and we are not yet in flowing mode
142
-
143
- this.resume();
144
- break;
145
-
146
- case 'end':
147
- this.listeners.end.push(callback); // emit 'end' event directly if we are flowing
148
- // and the end has already been reached
149
- //
150
- // finish() when it went through
151
-
152
- if (this.state.flowing && this.flowEnd()) {
153
- this.destroy();
154
- }
155
-
156
- break;
157
-
158
- case 'error':
159
- this.listeners.error.push(callback); // emit buffered 'error' events unless done already
160
- // now that we know that we have at least one listener
161
-
162
- if (this.state.flowing) {
163
- this.flowErrors();
164
- }
165
-
166
- break;
167
- }
168
- }
169
-
170
- removeListener(event, callback) {
171
- if (this.state.destroyed) {
172
- return;
173
- }
174
-
175
- let listeners = undefined;
176
-
177
- switch (event) {
178
- case 'data':
179
- listeners = this.listeners.data;
180
- break;
181
-
182
- case 'end':
183
- listeners = this.listeners.end;
184
- break;
185
-
186
- case 'error':
187
- listeners = this.listeners.error;
188
- break;
189
- }
190
-
191
- if (listeners) {
192
- const index = listeners.indexOf(callback);
193
-
194
- if (index >= 0) {
195
- listeners.splice(index, 1);
196
- }
197
- }
198
- }
199
-
200
- flowData() {
201
- if (this.buffer.data.length > 0) {
202
- const fullDataBuffer = this.reducer(this.buffer.data);
203
- this.listeners.data.forEach(listener => listener(fullDataBuffer));
204
- this.buffer.data.length = 0; // When the buffer is empty, resolve all pending writers
205
-
206
- const pendingWritePromises = [...this.pendingWritePromises];
207
- this.pendingWritePromises.length = 0;
208
- pendingWritePromises.forEach(pendingWritePromise => pendingWritePromise());
209
- }
210
- }
211
-
212
- flowErrors() {
213
- if (this.listeners.error.length > 0) {
214
- for (const error of this.buffer.error) {
215
- this.listeners.error.forEach(listener => listener(error));
216
- }
217
-
218
- this.buffer.error.length = 0;
219
- }
220
- }
221
-
222
- flowEnd() {
223
- if (this.state.ended) {
224
- this.listeners.end.forEach(listener => listener());
225
- return this.listeners.end.length > 0;
226
- }
227
-
228
- return false;
229
- }
230
-
231
- destroy() {
232
- if (!this.state.destroyed) {
233
- this.state.destroyed = true;
234
- this.state.ended = true;
235
- this.buffer.data.length = 0;
236
- this.buffer.error.length = 0;
237
- this.listeners.data.length = 0;
238
- this.listeners.error.length = 0;
239
- this.listeners.end.length = 0;
240
- this.pendingWritePromises.length = 0;
241
- }
242
- }
243
-
244
- }
245
- /**
246
- * Helper to fully read a T readable into a T.
247
- */
248
-
249
-
250
- function consumeReadable(readable, reducer) {
251
- const chunks = [];
252
- let chunk;
253
-
254
- while ((chunk = readable.read()) !== null) {
255
- chunks.push(chunk);
256
- }
257
-
258
- return reducer(chunks);
259
- }
260
-
261
- exports.consumeReadable = consumeReadable;
262
- /**
263
- * Helper to read a T readable up to a maximum of chunks. If the limit is
264
- * reached, will return a readable instead to ensure all data can still
265
- * be read.
266
- */
267
-
268
- function peekReadable(readable, reducer, maxChunks) {
269
- const chunks = [];
270
- let chunk = undefined;
271
-
272
- while ((chunk = readable.read()) !== null && chunks.length < maxChunks) {
273
- chunks.push(chunk);
274
- } // If the last chunk is null, it means we reached the end of
275
- // the readable and return all the data at once
276
-
277
-
278
- if (chunk === null && chunks.length > 0) {
279
- return reducer(chunks);
280
- } // Otherwise, we still have a chunk, it means we reached the maxChunks
281
- // value and as such we return a new Readable that first returns
282
- // the existing read chunks and then continues with reading from
283
- // the underlying readable.
284
-
285
-
286
- return {
287
- read: () => {
288
- // First consume chunks from our array
289
- if (chunks.length > 0) {
290
- return chunks.shift();
291
- } // Then ensure to return our last read chunk
292
-
293
-
294
- if (typeof chunk !== 'undefined') {
295
- const lastReadChunk = chunk; // explicitly use undefined here to indicate that we consumed
296
- // the chunk, which could have either been null or valued.
297
-
298
- chunk = undefined;
299
- return lastReadChunk;
300
- } // Finally delegate back to the Readable
301
-
302
-
303
- return readable.read();
304
- }
305
- };
306
- }
307
-
308
- exports.peekReadable = peekReadable;
309
- /**
310
- * Helper to fully read a T stream into a T.
311
- */
312
-
313
- function consumeStream(stream, reducer) {
314
- return new Promise((resolve, reject) => {
315
- const chunks = [];
316
- stream.on('data', data => chunks.push(data));
317
- stream.on('error', error => reject(error));
318
- stream.on('end', () => resolve(reducer(chunks)));
319
- });
320
- }
321
-
322
- exports.consumeStream = consumeStream;
323
- /**
324
- * Helper to peek up to `maxChunks` into a stream. The return type signals if
325
- * the stream has ended or not. If not, caller needs to add a `data` listener
326
- * to continue reading.
327
- */
328
-
329
- function peekStream(stream, maxChunks) {
330
- return new Promise((resolve, reject) => {
331
- const streamListeners = new lifecycle_1.DisposableStore(); // Data Listener
332
-
333
- const buffer = [];
334
-
335
- const dataListener = chunk => {
336
- // Add to buffer
337
- buffer.push(chunk); // We reached maxChunks and thus need to return
338
-
339
- if (buffer.length > maxChunks) {
340
- // Dispose any listeners and ensure to pause the
341
- // stream so that it can be consumed again by caller
342
- streamListeners.dispose();
343
- stream.pause();
344
- return resolve({
345
- stream,
346
- buffer,
347
- ended: false
348
- });
349
- }
350
- };
351
-
352
- streamListeners.add(lifecycle_1.toDisposable(() => stream.removeListener('data', dataListener)));
353
- stream.on('data', dataListener); // Error Listener
354
-
355
- const errorListener = error => {
356
- return reject(error);
357
- };
358
-
359
- streamListeners.add(lifecycle_1.toDisposable(() => stream.removeListener('error', errorListener)));
360
- stream.on('error', errorListener);
361
-
362
- const endListener = () => {
363
- return resolve({
364
- stream,
365
- buffer,
366
- ended: true
367
- });
368
- };
369
-
370
- streamListeners.add(lifecycle_1.toDisposable(() => stream.removeListener('end', endListener)));
371
- stream.on('end', endListener);
372
- });
373
- }
374
-
375
- exports.peekStream = peekStream;
376
- /**
377
- * Helper to create a readable stream from an existing T.
378
- */
379
-
380
- function toStream(t, reducer) {
381
- const stream = newWriteableStream(reducer);
382
- stream.end(t);
383
- return stream;
384
- }
385
-
386
- exports.toStream = toStream;
387
- /**
388
- * Helper to convert a T into a Readable<T>.
389
- */
390
-
391
- function toReadable(t) {
392
- let consumed = false;
393
- return {
394
- read: () => {
395
- if (consumed) {
396
- return null;
397
- }
398
-
399
- consumed = true;
400
- return t;
401
- }
402
- };
403
- }
404
-
405
- exports.toReadable = toReadable;
406
- /**
407
- * Helper to transform a readable stream into another stream.
408
- */
409
-
410
- function transform(stream, transformer, reducer) {
411
- const target = newWriteableStream(reducer);
412
- stream.on('data', data => target.write(transformer.data(data)));
413
- stream.on('end', () => target.end());
414
- stream.on('error', error => target.error(transformer.error ? transformer.error(error) : error));
415
- return target;
416
- }
417
-
418
- exports.transform = transform;