@itwin/core-bentley 4.0.0-dev.8 → 4.0.0-dev.81

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 (254) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/lib/cjs/AccessToken.d.ts +10 -10
  3. package/lib/cjs/AccessToken.d.ts.map +1 -1
  4. package/lib/cjs/AccessToken.js +9 -9
  5. package/lib/cjs/AccessToken.js.map +1 -1
  6. package/lib/cjs/Assert.d.ts +25 -25
  7. package/lib/cjs/Assert.js +45 -45
  8. package/lib/cjs/Assert.js.map +1 -1
  9. package/lib/cjs/BeEvent.d.ts +81 -81
  10. package/lib/cjs/BeEvent.d.ts.map +1 -1
  11. package/lib/cjs/BeEvent.js +156 -156
  12. package/lib/cjs/BeEvent.js.map +1 -1
  13. package/lib/cjs/BeSQLite.d.ts +172 -170
  14. package/lib/cjs/BeSQLite.d.ts.map +1 -1
  15. package/lib/cjs/BeSQLite.js +185 -183
  16. package/lib/cjs/BeSQLite.js.map +1 -1
  17. package/lib/cjs/BentleyError.d.ts +378 -378
  18. package/lib/cjs/BentleyError.d.ts.map +1 -1
  19. package/lib/cjs/BentleyError.js +703 -702
  20. package/lib/cjs/BentleyError.js.map +1 -1
  21. package/lib/cjs/BentleyLoggerCategory.d.ts +11 -11
  22. package/lib/cjs/BentleyLoggerCategory.js +19 -19
  23. package/lib/cjs/BentleyLoggerCategory.js.map +1 -1
  24. package/lib/cjs/ByteStream.d.ts +110 -110
  25. package/lib/cjs/ByteStream.js +159 -159
  26. package/lib/cjs/ByteStream.js.map +1 -1
  27. package/lib/cjs/ClassUtils.d.ts +14 -14
  28. package/lib/cjs/ClassUtils.js +27 -27
  29. package/lib/cjs/ClassUtils.js.map +1 -1
  30. package/lib/cjs/Compare.d.ts +47 -47
  31. package/lib/cjs/Compare.d.ts.map +1 -1
  32. package/lib/cjs/Compare.js +75 -75
  33. package/lib/cjs/Compare.js.map +1 -1
  34. package/lib/cjs/CompressedId64Set.d.ts +134 -134
  35. package/lib/cjs/CompressedId64Set.d.ts.map +1 -1
  36. package/lib/cjs/CompressedId64Set.js +428 -428
  37. package/lib/cjs/CompressedId64Set.js.map +1 -1
  38. package/lib/cjs/Dictionary.d.ts +125 -125
  39. package/lib/cjs/Dictionary.js +203 -203
  40. package/lib/cjs/Dictionary.js.map +1 -1
  41. package/lib/cjs/Disposable.d.ts +80 -80
  42. package/lib/cjs/Disposable.d.ts.map +1 -1
  43. package/lib/cjs/Disposable.js +120 -120
  44. package/lib/cjs/Disposable.js.map +1 -1
  45. package/lib/cjs/Id.d.ts +285 -285
  46. package/lib/cjs/Id.d.ts.map +1 -1
  47. package/lib/cjs/Id.js +643 -643
  48. package/lib/cjs/Id.js.map +1 -1
  49. package/lib/cjs/IndexMap.d.ts +65 -65
  50. package/lib/cjs/IndexMap.js +91 -91
  51. package/lib/cjs/IndexMap.js.map +1 -1
  52. package/lib/cjs/JsonSchema.d.ts +77 -77
  53. package/lib/cjs/JsonSchema.d.ts.map +1 -1
  54. package/lib/cjs/JsonSchema.js +9 -9
  55. package/lib/cjs/JsonSchema.js.map +1 -1
  56. package/lib/cjs/JsonUtils.d.ts +78 -78
  57. package/lib/cjs/JsonUtils.js +151 -151
  58. package/lib/cjs/JsonUtils.js.map +1 -1
  59. package/lib/cjs/LRUMap.d.ts +129 -129
  60. package/lib/cjs/LRUMap.js +333 -333
  61. package/lib/cjs/LRUMap.js.map +1 -1
  62. package/lib/cjs/Logger.d.ts +143 -143
  63. package/lib/cjs/Logger.d.ts.map +1 -1
  64. package/lib/cjs/Logger.js +256 -258
  65. package/lib/cjs/Logger.js.map +1 -1
  66. package/lib/cjs/ObservableSet.d.ts +23 -23
  67. package/lib/cjs/ObservableSet.js +51 -51
  68. package/lib/cjs/ObservableSet.js.map +1 -1
  69. package/lib/cjs/OneAtATimeAction.d.ts +31 -31
  70. package/lib/cjs/OneAtATimeAction.js +94 -94
  71. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  72. package/lib/cjs/OrderedId64Iterable.d.ts +74 -74
  73. package/lib/cjs/OrderedId64Iterable.d.ts.map +1 -1
  74. package/lib/cjs/OrderedId64Iterable.js +235 -235
  75. package/lib/cjs/OrderedId64Iterable.js.map +1 -1
  76. package/lib/cjs/OrderedSet.d.ts +40 -40
  77. package/lib/cjs/OrderedSet.js +64 -64
  78. package/lib/cjs/OrderedSet.js.map +1 -1
  79. package/lib/cjs/PriorityQueue.d.ts +70 -70
  80. package/lib/cjs/PriorityQueue.d.ts.map +1 -1
  81. package/lib/cjs/PriorityQueue.js +140 -140
  82. package/lib/cjs/PriorityQueue.js.map +1 -1
  83. package/lib/cjs/ProcessDetector.d.ts +59 -59
  84. package/lib/cjs/ProcessDetector.js +71 -71
  85. package/lib/cjs/ProcessDetector.js.map +1 -1
  86. package/lib/cjs/SortedArray.d.ts +236 -232
  87. package/lib/cjs/SortedArray.d.ts.map +1 -1
  88. package/lib/cjs/SortedArray.js +315 -303
  89. package/lib/cjs/SortedArray.js.map +1 -1
  90. package/lib/cjs/StatusCategory.d.ts +30 -30
  91. package/lib/cjs/StatusCategory.d.ts.map +1 -1
  92. package/lib/cjs/StatusCategory.js +460 -460
  93. package/lib/cjs/StatusCategory.js.map +1 -1
  94. package/lib/cjs/StringUtils.d.ts +22 -22
  95. package/lib/cjs/StringUtils.js +148 -148
  96. package/lib/cjs/StringUtils.js.map +1 -1
  97. package/lib/cjs/Time.d.ts +122 -122
  98. package/lib/cjs/Time.js +152 -152
  99. package/lib/cjs/Time.js.map +1 -1
  100. package/lib/cjs/Tracing.d.ts +43 -40
  101. package/lib/cjs/Tracing.d.ts.map +1 -1
  102. package/lib/cjs/Tracing.js +134 -130
  103. package/lib/cjs/Tracing.js.map +1 -1
  104. package/lib/cjs/TupleKeyedMap.d.ts +36 -36
  105. package/lib/cjs/TupleKeyedMap.js +102 -102
  106. package/lib/cjs/TupleKeyedMap.js.map +1 -1
  107. package/lib/cjs/TypedArrayBuilder.d.ts +155 -155
  108. package/lib/cjs/TypedArrayBuilder.d.ts.map +1 -1
  109. package/lib/cjs/TypedArrayBuilder.js +206 -208
  110. package/lib/cjs/TypedArrayBuilder.js.map +1 -1
  111. package/lib/cjs/UnexpectedErrors.d.ts +43 -43
  112. package/lib/cjs/UnexpectedErrors.d.ts.map +1 -1
  113. package/lib/cjs/UnexpectedErrors.js +68 -68
  114. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  115. package/lib/cjs/UtilityTypes.d.ts +112 -96
  116. package/lib/cjs/UtilityTypes.d.ts.map +1 -1
  117. package/lib/cjs/UtilityTypes.js +40 -40
  118. package/lib/cjs/UtilityTypes.js.map +1 -1
  119. package/lib/cjs/YieldManager.d.ts +18 -18
  120. package/lib/cjs/YieldManager.js +34 -34
  121. package/lib/cjs/YieldManager.js.map +1 -1
  122. package/lib/cjs/core-bentley.d.ts +74 -74
  123. package/lib/cjs/core-bentley.js +94 -90
  124. package/lib/cjs/core-bentley.js.map +1 -1
  125. package/lib/cjs/partitionArray.d.ts +21 -21
  126. package/lib/cjs/partitionArray.js +43 -43
  127. package/lib/cjs/partitionArray.js.map +1 -1
  128. package/lib/esm/AccessToken.d.ts +10 -10
  129. package/lib/esm/AccessToken.d.ts.map +1 -1
  130. package/lib/esm/AccessToken.js +8 -8
  131. package/lib/esm/AccessToken.js.map +1 -1
  132. package/lib/esm/Assert.d.ts +25 -25
  133. package/lib/esm/Assert.js +41 -41
  134. package/lib/esm/Assert.js.map +1 -1
  135. package/lib/esm/BeEvent.d.ts +81 -81
  136. package/lib/esm/BeEvent.d.ts.map +1 -1
  137. package/lib/esm/BeEvent.js +150 -150
  138. package/lib/esm/BeEvent.js.map +1 -1
  139. package/lib/esm/BeSQLite.d.ts +172 -170
  140. package/lib/esm/BeSQLite.d.ts.map +1 -1
  141. package/lib/esm/BeSQLite.js +182 -180
  142. package/lib/esm/BeSQLite.js.map +1 -1
  143. package/lib/esm/BentleyError.d.ts +378 -378
  144. package/lib/esm/BentleyError.d.ts.map +1 -1
  145. package/lib/esm/BentleyError.js +699 -698
  146. package/lib/esm/BentleyError.js.map +1 -1
  147. package/lib/esm/BentleyLoggerCategory.d.ts +11 -11
  148. package/lib/esm/BentleyLoggerCategory.js +16 -16
  149. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  150. package/lib/esm/ByteStream.d.ts +110 -110
  151. package/lib/esm/ByteStream.js +155 -155
  152. package/lib/esm/ByteStream.js.map +1 -1
  153. package/lib/esm/ClassUtils.d.ts +14 -14
  154. package/lib/esm/ClassUtils.js +22 -22
  155. package/lib/esm/ClassUtils.js.map +1 -1
  156. package/lib/esm/Compare.d.ts +47 -47
  157. package/lib/esm/Compare.d.ts.map +1 -1
  158. package/lib/esm/Compare.js +63 -63
  159. package/lib/esm/Compare.js.map +1 -1
  160. package/lib/esm/CompressedId64Set.d.ts +134 -134
  161. package/lib/esm/CompressedId64Set.d.ts.map +1 -1
  162. package/lib/esm/CompressedId64Set.js +423 -423
  163. package/lib/esm/CompressedId64Set.js.map +1 -1
  164. package/lib/esm/Dictionary.d.ts +125 -125
  165. package/lib/esm/Dictionary.js +199 -199
  166. package/lib/esm/Dictionary.js.map +1 -1
  167. package/lib/esm/Disposable.d.ts +80 -80
  168. package/lib/esm/Disposable.d.ts.map +1 -1
  169. package/lib/esm/Disposable.js +112 -112
  170. package/lib/esm/Disposable.js.map +1 -1
  171. package/lib/esm/Id.d.ts +285 -285
  172. package/lib/esm/Id.d.ts.map +1 -1
  173. package/lib/esm/Id.js +639 -639
  174. package/lib/esm/Id.js.map +1 -1
  175. package/lib/esm/IndexMap.d.ts +65 -65
  176. package/lib/esm/IndexMap.js +86 -86
  177. package/lib/esm/IndexMap.js.map +1 -1
  178. package/lib/esm/JsonSchema.d.ts +77 -77
  179. package/lib/esm/JsonSchema.d.ts.map +1 -1
  180. package/lib/esm/JsonSchema.js +8 -8
  181. package/lib/esm/JsonSchema.js.map +1 -1
  182. package/lib/esm/JsonUtils.d.ts +78 -78
  183. package/lib/esm/JsonUtils.js +148 -148
  184. package/lib/esm/JsonUtils.js.map +1 -1
  185. package/lib/esm/LRUMap.d.ts +129 -129
  186. package/lib/esm/LRUMap.js +326 -326
  187. package/lib/esm/LRUMap.js.map +1 -1
  188. package/lib/esm/Logger.d.ts +143 -143
  189. package/lib/esm/Logger.d.ts.map +1 -1
  190. package/lib/esm/Logger.js +253 -253
  191. package/lib/esm/Logger.js.map +1 -1
  192. package/lib/esm/ObservableSet.d.ts +23 -23
  193. package/lib/esm/ObservableSet.js +47 -47
  194. package/lib/esm/ObservableSet.js.map +1 -1
  195. package/lib/esm/OneAtATimeAction.d.ts +31 -31
  196. package/lib/esm/OneAtATimeAction.js +89 -89
  197. package/lib/esm/OneAtATimeAction.js.map +1 -1
  198. package/lib/esm/OrderedId64Iterable.d.ts +74 -74
  199. package/lib/esm/OrderedId64Iterable.d.ts.map +1 -1
  200. package/lib/esm/OrderedId64Iterable.js +232 -232
  201. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  202. package/lib/esm/OrderedSet.d.ts +40 -40
  203. package/lib/esm/OrderedSet.js +59 -59
  204. package/lib/esm/OrderedSet.js.map +1 -1
  205. package/lib/esm/PriorityQueue.d.ts +70 -70
  206. package/lib/esm/PriorityQueue.d.ts.map +1 -1
  207. package/lib/esm/PriorityQueue.js +136 -136
  208. package/lib/esm/PriorityQueue.js.map +1 -1
  209. package/lib/esm/ProcessDetector.d.ts +59 -59
  210. package/lib/esm/ProcessDetector.js +67 -67
  211. package/lib/esm/ProcessDetector.js.map +1 -1
  212. package/lib/esm/SortedArray.d.ts +236 -232
  213. package/lib/esm/SortedArray.d.ts.map +1 -1
  214. package/lib/esm/SortedArray.js +308 -296
  215. package/lib/esm/SortedArray.js.map +1 -1
  216. package/lib/esm/StatusCategory.d.ts +30 -30
  217. package/lib/esm/StatusCategory.d.ts.map +1 -1
  218. package/lib/esm/StatusCategory.js +455 -454
  219. package/lib/esm/StatusCategory.js.map +1 -1
  220. package/lib/esm/StringUtils.d.ts +22 -22
  221. package/lib/esm/StringUtils.js +142 -142
  222. package/lib/esm/StringUtils.js.map +1 -1
  223. package/lib/esm/Time.d.ts +122 -122
  224. package/lib/esm/Time.js +146 -146
  225. package/lib/esm/Time.js.map +1 -1
  226. package/lib/esm/Tracing.d.ts +43 -40
  227. package/lib/esm/Tracing.d.ts.map +1 -1
  228. package/lib/esm/Tracing.js +130 -126
  229. package/lib/esm/Tracing.js.map +1 -1
  230. package/lib/esm/TupleKeyedMap.d.ts +36 -36
  231. package/lib/esm/TupleKeyedMap.js +98 -98
  232. package/lib/esm/TupleKeyedMap.js.map +1 -1
  233. package/lib/esm/TypedArrayBuilder.d.ts +155 -155
  234. package/lib/esm/TypedArrayBuilder.d.ts.map +1 -1
  235. package/lib/esm/TypedArrayBuilder.js +198 -200
  236. package/lib/esm/TypedArrayBuilder.js.map +1 -1
  237. package/lib/esm/UnexpectedErrors.d.ts +43 -43
  238. package/lib/esm/UnexpectedErrors.d.ts.map +1 -1
  239. package/lib/esm/UnexpectedErrors.js +65 -64
  240. package/lib/esm/UnexpectedErrors.js.map +1 -1
  241. package/lib/esm/UtilityTypes.d.ts +112 -96
  242. package/lib/esm/UtilityTypes.d.ts.map +1 -1
  243. package/lib/esm/UtilityTypes.js +34 -34
  244. package/lib/esm/UtilityTypes.js.map +1 -1
  245. package/lib/esm/YieldManager.d.ts +18 -18
  246. package/lib/esm/YieldManager.js +30 -30
  247. package/lib/esm/YieldManager.js.map +1 -1
  248. package/lib/esm/core-bentley.d.ts +74 -74
  249. package/lib/esm/core-bentley.js +78 -78
  250. package/lib/esm/core-bentley.js.map +1 -1
  251. package/lib/esm/partitionArray.d.ts +21 -21
  252. package/lib/esm/partitionArray.js +39 -39
  253. package/lib/esm/partitionArray.js.map +1 -1
  254. package/package.json +9 -9
@@ -1,137 +1,137 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Collections
7
- */
8
- import { shallowClone } from "./SortedArray";
9
- /**
10
- * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
11
- * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
12
- * @public
13
- */
14
- export class PriorityQueue {
15
- /**
16
- * Constructor
17
- * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
18
- * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
19
- * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
20
- */
21
- constructor(compare, clone = shallowClone) {
22
- this._array = [];
23
- this._compare = compare;
24
- this._clone = clone;
25
- }
26
- /** The number of values in the queue. */
27
- get length() { return this._array.length; }
28
- /** Returns true if the queue contains no values. */
29
- get isEmpty() { return 0 === this.length; }
30
- /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
31
- [Symbol.iterator]() { return this._array[Symbol.iterator](); }
32
- _swap(a, b) {
33
- const temp = this._array[a];
34
- this._array[a] = this._array[b];
35
- this._array[b] = temp;
36
- }
37
- _heapify(index) {
38
- let candidate = -1;
39
- while (true) {
40
- const right = 2 * (index + 1);
41
- const left = right - 1;
42
- if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)
43
- candidate = left;
44
- else
45
- candidate = index;
46
- if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)
47
- candidate = right;
48
- if (candidate !== index) {
49
- this._swap(candidate, index);
50
- index = candidate;
51
- }
52
- else {
53
- break;
54
- }
55
- }
56
- }
57
- /**
58
- * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
59
- * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
60
- */
61
- sort() {
62
- for (let i = Math.ceil(this.length / 2); i >= 0; i--)
63
- this._heapify(i);
64
- }
65
- /**
66
- * Pushes a value onto the queue according to the sorting criterion.
67
- * @param value The value to insert
68
- * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
69
- */
70
- push(value) {
71
- const clone = this._clone(value);
72
- let index = this.length;
73
- this._array.push(clone);
74
- while (index !== 0) {
75
- const parent = Math.floor((index - 1) / 2);
76
- if (this._compare(this._array[index], this._array[parent]) < 0) {
77
- this._swap(index, parent);
78
- index = parent;
79
- }
80
- else {
81
- break;
82
- }
83
- }
84
- return clone;
85
- }
86
- /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
87
- * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
88
- * @param value The value to append
89
- * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
90
- */
91
- append(value) {
92
- const clone = this._clone(value);
93
- this._array.push(clone);
94
- return clone;
95
- }
96
- /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
97
- get front() {
98
- return this._peek(0);
99
- }
100
- /**
101
- * Removes the front-most element off of the queue and returns it.
102
- * @returns The front-most element, or undefined if the queue is empty.
103
- */
104
- pop() {
105
- return this._pop(0);
106
- }
107
- /** Removes all values from the queue. */
108
- clear() {
109
- this._array.length = 0;
110
- }
111
- /**
112
- * Removes the value at the specified index from the queue and reorders the queue.
113
- * @param index The index of the value to remove
114
- * @returns the value at the specified index, or undefined if the index is out of range.
115
- */
116
- _pop(index) {
117
- if (index < 0 || index >= this.length)
118
- return undefined;
119
- const root = this._array[index];
120
- this._swap(index, this.length - 1);
121
- this._array.length--;
122
- this._heapify(index);
123
- return root;
124
- }
125
- /**
126
- * Returns the value at the specified index in the queue.
127
- * @param index The index of the value to retrieve
128
- * @returns the value at the specified index, or undefined if the index is out of range.
129
- */
130
- _peek(index) {
131
- if (index < 0 || index >= this.length)
132
- return undefined;
133
- else
134
- return this._array[index];
135
- }
136
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Collections
7
+ */
8
+ import { shallowClone } from "./SortedArray";
9
+ /**
10
+ * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.
11
+ * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.
12
+ * @public
13
+ */
14
+ export class PriorityQueue {
15
+ /**
16
+ * Constructor
17
+ * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.
18
+ * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.
19
+ * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.
20
+ */
21
+ constructor(compare, clone = shallowClone) {
22
+ this._array = [];
23
+ this._compare = compare;
24
+ this._clone = clone;
25
+ }
26
+ /** The number of values in the queue. */
27
+ get length() { return this._array.length; }
28
+ /** Returns true if the queue contains no values. */
29
+ get isEmpty() { return 0 === this.length; }
30
+ /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */
31
+ [Symbol.iterator]() { return this._array[Symbol.iterator](); }
32
+ _swap(a, b) {
33
+ const temp = this._array[a];
34
+ this._array[a] = this._array[b];
35
+ this._array[b] = temp;
36
+ }
37
+ _heapify(index) {
38
+ let candidate = -1;
39
+ while (true) {
40
+ const right = 2 * (index + 1);
41
+ const left = right - 1;
42
+ if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)
43
+ candidate = left;
44
+ else
45
+ candidate = index;
46
+ if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)
47
+ candidate = right;
48
+ if (candidate !== index) {
49
+ this._swap(candidate, index);
50
+ index = candidate;
51
+ }
52
+ else {
53
+ break;
54
+ }
55
+ }
56
+ }
57
+ /**
58
+ * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.
59
+ * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.
60
+ */
61
+ sort() {
62
+ for (let i = Math.ceil(this.length / 2); i >= 0; i--)
63
+ this._heapify(i);
64
+ }
65
+ /**
66
+ * Pushes a value onto the queue according to the sorting criterion.
67
+ * @param value The value to insert
68
+ * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
69
+ */
70
+ push(value) {
71
+ const clone = this._clone(value);
72
+ let index = this.length;
73
+ this._array.push(clone);
74
+ while (index !== 0) {
75
+ const parent = Math.floor((index - 1) / 2);
76
+ if (this._compare(this._array[index], this._array[parent]) < 0) {
77
+ this._swap(index, parent);
78
+ index = parent;
79
+ }
80
+ else {
81
+ break;
82
+ }
83
+ }
84
+ return clone;
85
+ }
86
+ /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.
87
+ * After using this function, you must manually invoke sort() to ensure the queue is sorted again.
88
+ * @param value The value to append
89
+ * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.
90
+ */
91
+ append(value) {
92
+ const clone = this._clone(value);
93
+ this._array.push(clone);
94
+ return clone;
95
+ }
96
+ /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */
97
+ get front() {
98
+ return this._peek(0);
99
+ }
100
+ /**
101
+ * Removes the front-most element off of the queue and returns it.
102
+ * @returns The front-most element, or undefined if the queue is empty.
103
+ */
104
+ pop() {
105
+ return this._pop(0);
106
+ }
107
+ /** Removes all values from the queue. */
108
+ clear() {
109
+ this._array.length = 0;
110
+ }
111
+ /**
112
+ * Removes the value at the specified index from the queue and reorders the queue.
113
+ * @param index The index of the value to remove
114
+ * @returns the value at the specified index, or undefined if the index is out of range.
115
+ */
116
+ _pop(index) {
117
+ if (index < 0 || index >= this.length)
118
+ return undefined;
119
+ const root = this._array[index];
120
+ this._swap(index, this.length - 1);
121
+ this._array.length--;
122
+ this._heapify(index);
123
+ return root;
124
+ }
125
+ /**
126
+ * Returns the value at the specified index in the queue.
127
+ * @param index The index of the value to retrieve
128
+ * @returns the value at the specified index, or undefined if the index is out of range.
129
+ */
130
+ _peek(index) {
131
+ if (index < 0 || index >= this.length)
132
+ return undefined;
133
+ else
134
+ return this._array[index];
135
+ }
136
+ }
137
137
  //# sourceMappingURL=PriorityQueue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/PriorityQueue.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { CloneFunction, shallowClone } from \"./SortedArray\";\r\n\r\n/** @public */\r\nexport type ComputePriorityFunction<T> = (value: T) => number;\r\n\r\n/**\r\n * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.\r\n * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.\r\n * @public\r\n */\r\nexport class PriorityQueue<T> implements Iterable<T> {\r\n protected _array: T[] = [];\r\n protected readonly _compare: OrderedComparator<T>;\r\n protected readonly _clone: CloneFunction<T>;\r\n\r\n /**\r\n * Constructor\r\n * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.\r\n * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.\r\n * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.\r\n */\r\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\r\n this._compare = compare;\r\n this._clone = clone;\r\n }\r\n\r\n /** The number of values in the queue. */\r\n public get length(): number { return this._array.length; }\r\n\r\n /** Returns true if the queue contains no values. */\r\n public get isEmpty(): boolean { return 0 === this.length; }\r\n\r\n /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */\r\n public [Symbol.iterator](): Iterator<T> { return this._array[Symbol.iterator](); }\r\n\r\n protected _swap(a: number, b: number) {\r\n const temp = this._array[a];\r\n this._array[a] = this._array[b];\r\n this._array[b] = temp;\r\n }\r\n\r\n protected _heapify(index: number): void {\r\n let candidate = -1;\r\n while (true) {\r\n const right = 2 * (index + 1);\r\n const left = right - 1;\r\n if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)\r\n candidate = left;\r\n else\r\n candidate = index;\r\n\r\n if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)\r\n candidate = right;\r\n\r\n if (candidate !== index) {\r\n this._swap(candidate, index);\r\n index = candidate;\r\n } else {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.\r\n * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.\r\n */\r\n public sort(): void {\r\n for (let i = Math.ceil(this.length / 2); i >= 0; i--)\r\n this._heapify(i);\r\n }\r\n\r\n /**\r\n * Pushes a value onto the queue according to the sorting criterion.\r\n * @param value The value to insert\r\n * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\r\n */\r\n public push(value: T): T {\r\n const clone = this._clone(value);\r\n\r\n let index = this.length;\r\n this._array.push(clone);\r\n\r\n while (index !== 0) {\r\n const parent = Math.floor((index - 1) / 2);\r\n if (this._compare(this._array[index], this._array[parent]) < 0) {\r\n this._swap(index, parent);\r\n index = parent;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n return clone;\r\n }\r\n\r\n /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.\r\n * After using this function, you must manually invoke sort() to ensure the queue is sorted again.\r\n * @param value The value to append\r\n * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\r\n */\r\n public append(value: T): T {\r\n const clone = this._clone(value);\r\n this._array.push(clone);\r\n return clone;\r\n }\r\n\r\n /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */\r\n public get front(): T | undefined {\r\n return this._peek(0);\r\n }\r\n\r\n /**\r\n * Removes the front-most element off of the queue and returns it.\r\n * @returns The front-most element, or undefined if the queue is empty.\r\n */\r\n public pop(): T | undefined {\r\n return this._pop(0);\r\n }\r\n\r\n /** Removes all values from the queue. */\r\n public clear(): void {\r\n this._array.length = 0;\r\n }\r\n\r\n /**\r\n * Removes the value at the specified index from the queue and reorders the queue.\r\n * @param index The index of the value to remove\r\n * @returns the value at the specified index, or undefined if the index is out of range.\r\n */\r\n protected _pop(index: number): T | undefined {\r\n if (index < 0 || index >= this.length)\r\n return undefined;\r\n\r\n const root = this._array[index];\r\n this._swap(index, this.length - 1);\r\n this._array.length--;\r\n\r\n this._heapify(index);\r\n return root;\r\n }\r\n\r\n /**\r\n * Returns the value at the specified index in the queue.\r\n * @param index The index of the value to retrieve\r\n * @returns the value at the specified index, or undefined if the index is out of range.\r\n */\r\n protected _peek(index: number): T | undefined {\r\n if (index < 0 || index >= this.length)\r\n return undefined;\r\n else\r\n return this._array[index];\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"PriorityQueue.js","sourceRoot":"","sources":["../../src/PriorityQueue.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Collections\n */\n\nimport { OrderedComparator } from \"./Compare\";\nimport { CloneFunction, shallowClone } from \"./SortedArray\";\n\n/** @public */\nexport type ComputePriorityFunction<T> = (value: T) => number;\n\n/**\n * A [priority queue](https://en.wikipedia.org/wiki/Priority_queue) implemented as a heap array.\n * The queue is ordered by an [[OrderedComparator]] function supplied by the user such that the value in the queue that compares less than all other values is always located at the front of the queue.\n * @public\n */\nexport class PriorityQueue<T> implements Iterable<T> {\n protected _array: T[] = [];\n protected readonly _compare: OrderedComparator<T>;\n protected readonly _clone: CloneFunction<T>;\n\n /**\n * Constructor\n * @param compare The function used to compare values in the queue. If `compare(x, y)` returns a negative value, then x is placed before y in the queue.\n * @param clone The function used to clone a value for insertion onto the queue. The default implementation simply returns its input.\n * @note If the criterion which control the result of the `compare` function changes, then [[PriorityQueue.sort]] should be used to reorder the queue according to the new criterion.\n */\n public constructor(compare: OrderedComparator<T>, clone: CloneFunction<T> = shallowClone) {\n this._compare = compare;\n this._clone = clone;\n }\n\n /** The number of values in the queue. */\n public get length(): number { return this._array.length; }\n\n /** Returns true if the queue contains no values. */\n public get isEmpty(): boolean { return 0 === this.length; }\n\n /** Returns an iterator over the contents of the heap suitable for use in `for-of` loops. */\n public [Symbol.iterator](): Iterator<T> { return this._array[Symbol.iterator](); }\n\n protected _swap(a: number, b: number) {\n const temp = this._array[a];\n this._array[a] = this._array[b];\n this._array[b] = temp;\n }\n\n protected _heapify(index: number): void {\n let candidate = -1;\n while (true) {\n const right = 2 * (index + 1);\n const left = right - 1;\n if (left < this.length && this._compare(this._array[left], this._array[index]) < 0)\n candidate = left;\n else\n candidate = index;\n\n if (right < this.length && this._compare(this._array[right], this._array[candidate]) < 0)\n candidate = right;\n\n if (candidate !== index) {\n this._swap(candidate, index);\n index = candidate;\n } else {\n break;\n }\n }\n }\n\n /**\n * Reorders the queue. This function should only (and *always*) be called when the criteria governing the ordering of items on the queue have changed.\n * For example, a priority queue containing graphics sorted by their distance from the camera would need to be reordered when the position of the camera changes.\n */\n public sort(): void {\n for (let i = Math.ceil(this.length / 2); i >= 0; i--)\n this._heapify(i);\n }\n\n /**\n * Pushes a value onto the queue according to the sorting criterion.\n * @param value The value to insert\n * @returns The inserted value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\n */\n public push(value: T): T {\n const clone = this._clone(value);\n\n let index = this.length;\n this._array.push(clone);\n\n while (index !== 0) {\n const parent = Math.floor((index - 1) / 2);\n if (this._compare(this._array[index], this._array[parent]) < 0) {\n this._swap(index, parent);\n index = parent;\n } else {\n break;\n }\n }\n\n return clone;\n }\n\n /** Pushes a value onto the back of the queue without making any attempt to enforce ordering.\n * After using this function, you must manually invoke sort() to ensure the queue is sorted again.\n * @param value The value to append\n * @returns The appended value, cloned according to the [[CloneFunction]] supplied to this queue's constructor.\n */\n public append(value: T): T {\n const clone = this._clone(value);\n this._array.push(clone);\n return clone;\n }\n\n /** Returns the element at the front of the queue, or `undefined` if the queue is empty. */\n public get front(): T | undefined {\n return this._peek(0);\n }\n\n /**\n * Removes the front-most element off of the queue and returns it.\n * @returns The front-most element, or undefined if the queue is empty.\n */\n public pop(): T | undefined {\n return this._pop(0);\n }\n\n /** Removes all values from the queue. */\n public clear(): void {\n this._array.length = 0;\n }\n\n /**\n * Removes the value at the specified index from the queue and reorders the queue.\n * @param index The index of the value to remove\n * @returns the value at the specified index, or undefined if the index is out of range.\n */\n protected _pop(index: number): T | undefined {\n if (index < 0 || index >= this.length)\n return undefined;\n\n const root = this._array[index];\n this._swap(index, this.length - 1);\n this._array.length--;\n\n this._heapify(index);\n return root;\n }\n\n /**\n * Returns the value at the specified index in the queue.\n * @param index The index of the value to retrieve\n * @returns the value at the specified index, or undefined if the index is out of range.\n */\n protected _peek(index: number): T | undefined {\n if (index < 0 || index >= this.length)\n return undefined;\n else\n return this._array[index];\n }\n}\n"]}
@@ -1,60 +1,60 @@
1
- /** @packageDocumentation
2
- * @module ProcessDetector
3
- */
4
- /** Functions to determine the type of JavaScript process currently executing.
5
- * @public
6
- */
7
- export declare class ProcessDetector {
8
- /** Is this a browser process?
9
- * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.
10
- */
11
- static get isBrowserProcess(): boolean;
12
- /** Is this a Node process?
13
- * @note this means "is this a backend process"? It will return `true` for all backend process, including Electron and mobile apps.
14
- */
15
- static get isNodeProcess(): boolean;
16
- /** Is this process the frontend of an Electron app? */
17
- static get isElectronAppFrontend(): boolean;
18
- /** Is this process the backend of an Electron app? */
19
- static get isElectronAppBackend(): boolean;
20
- /** Is this process running in a browser on an iPad?
21
- * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
22
- */
23
- static get isIPadBrowser(): boolean;
24
- /** Is this process running in a browser on an iPhone?
25
- * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
26
- */
27
- static get isIPhoneBrowser(): boolean;
28
- /** Is this process running in a browser on an iOS device?
29
- * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
30
- */
31
- static get isIOSBrowser(): boolean;
32
- /** Is this process running in a browser on an Android device?
33
- * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.
34
- */
35
- static get isAndroidBrowser(): boolean;
36
- /** Is this process running in a browser on a mobile device?
37
- * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.
38
- */
39
- static get isMobileBrowser(): boolean;
40
- /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */
41
- static get isChromium(): boolean;
42
- /** Is this process the frontend of an iTwin mobile application?
43
- * @note this indicates that this is a browser process started by an iTwin mobile application.
44
- * It will return `false` when running user-launched web browsers on a mobile device.
45
- */
46
- static get isMobileAppFrontend(): boolean;
47
- /** Is this process the frontend of an iOS mobile application? */
48
- static get isIOSAppFrontend(): boolean;
49
- /** Is this process the frontend of an Android mobile application? */
50
- static get isAndroidAppFrontend(): boolean;
51
- /** Is this process the backend of an iOS mobile application? */
52
- static get isIOSAppBackend(): boolean;
53
- /** Is this process the backend of an Android mobile application? */
54
- static get isAndroidAppBackend(): boolean;
55
- /** Is this process a mobile app backend? */
56
- static get isMobileAppBackend(): boolean;
57
- /** Is this process the frontend of a native (Electron or Mobile) app? */
58
- static get isNativeAppFrontend(): boolean;
59
- }
1
+ /** @packageDocumentation
2
+ * @module ProcessDetector
3
+ */
4
+ /** Functions to determine the type of JavaScript process currently executing.
5
+ * @public
6
+ */
7
+ export declare class ProcessDetector {
8
+ /** Is this a browser process?
9
+ * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.
10
+ */
11
+ static get isBrowserProcess(): boolean;
12
+ /** Is this a Node process?
13
+ * @note this means "is this a backend process"? It will return `true` for all backend process, including Electron and mobile apps.
14
+ */
15
+ static get isNodeProcess(): boolean;
16
+ /** Is this process the frontend of an Electron app? */
17
+ static get isElectronAppFrontend(): boolean;
18
+ /** Is this process the backend of an Electron app? */
19
+ static get isElectronAppBackend(): boolean;
20
+ /** Is this process running in a browser on an iPad?
21
+ * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
22
+ */
23
+ static get isIPadBrowser(): boolean;
24
+ /** Is this process running in a browser on an iPhone?
25
+ * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
26
+ */
27
+ static get isIPhoneBrowser(): boolean;
28
+ /** Is this process running in a browser on an iOS device?
29
+ * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
30
+ */
31
+ static get isIOSBrowser(): boolean;
32
+ /** Is this process running in a browser on an Android device?
33
+ * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.
34
+ */
35
+ static get isAndroidBrowser(): boolean;
36
+ /** Is this process running in a browser on a mobile device?
37
+ * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.
38
+ */
39
+ static get isMobileBrowser(): boolean;
40
+ /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */
41
+ static get isChromium(): boolean;
42
+ /** Is this process the frontend of an iTwin mobile application?
43
+ * @note this indicates that this is a browser process started by an iTwin mobile application.
44
+ * It will return `false` when running user-launched web browsers on a mobile device.
45
+ */
46
+ static get isMobileAppFrontend(): boolean;
47
+ /** Is this process the frontend of an iOS mobile application? */
48
+ static get isIOSAppFrontend(): boolean;
49
+ /** Is this process the frontend of an Android mobile application? */
50
+ static get isAndroidAppFrontend(): boolean;
51
+ /** Is this process the backend of an iOS mobile application? */
52
+ static get isIOSAppBackend(): boolean;
53
+ /** Is this process the backend of an Android mobile application? */
54
+ static get isAndroidAppBackend(): boolean;
55
+ /** Is this process a mobile app backend? */
56
+ static get isMobileAppBackend(): boolean;
57
+ /** Is this process the frontend of a native (Electron or Mobile) app? */
58
+ static get isNativeAppFrontend(): boolean;
59
+ }
60
60
  //# sourceMappingURL=ProcessDetector.d.ts.map
@@ -1,68 +1,68 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module ProcessDetector
7
- */
8
- /** Functions to determine the type of JavaScript process currently executing.
9
- * @public
10
- */
11
- export class ProcessDetector {
12
- /** Is this a browser process?
13
- * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.
14
- */
15
- static get isBrowserProcess() { return typeof window === "object" && typeof window.navigator === "object"; }
16
- /** Is this a Node process?
17
- * @note this means "is this a backend process"? It will return `true` for all backend process, including Electron and mobile apps.
18
- */
19
- static get isNodeProcess() { return typeof process === "object" && undefined !== process.platform; }
20
- /** Is this process the frontend of an Electron app? */
21
- static get isElectronAppFrontend() { return typeof navigator === "object" && navigator.userAgent.toLowerCase().indexOf("electron") >= 0; }
22
- /** Is this process the backend of an Electron app? */
23
- static get isElectronAppBackend() { return typeof process === "object" && process.versions.hasOwnProperty("electron"); }
24
- /** Is this process running in a browser on an iPad?
25
- * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
26
- */
27
- static get isIPadBrowser() {
28
- return this.isBrowserProcess && window.navigator.platform === "iPad" || (window.navigator.platform === "MacIntel" && window.navigator.maxTouchPoints > 0 && !("MSStream" in window)); /* eslint-disable-line deprecation/deprecation */
29
- }
30
- /** Is this process running in a browser on an iPhone?
31
- * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
32
- */
33
- static get isIPhoneBrowser() { return this.isBrowserProcess && (/(iphone|ipod)/i.test(window.navigator.userAgent)); }
34
- /** Is this process running in a browser on an iOS device?
35
- * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
36
- */
37
- static get isIOSBrowser() { return this.isIPadBrowser || this.isIPhoneBrowser; }
38
- /** Is this process running in a browser on an Android device?
39
- * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.
40
- */
41
- static get isAndroidBrowser() { return this.isBrowserProcess && /android/i.test(window.navigator.userAgent); }
42
- /** Is this process running in a browser on a mobile device?
43
- * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.
44
- */
45
- static get isMobileBrowser() { return this.isIOSBrowser || this.isAndroidBrowser; }
46
- /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */
47
- static get isChromium() {
48
- return (this.isBrowserProcess && window.navigator.userAgent.indexOf("Chrome") > -1 && window.navigator.userAgent.indexOf("OP") === -1) || this.isElectronAppFrontend;
49
- }
50
- /** Is this process the frontend of an iTwin mobile application?
51
- * @note this indicates that this is a browser process started by an iTwin mobile application.
52
- * It will return `false` when running user-launched web browsers on a mobile device.
53
- */
54
- static get isMobileAppFrontend() { return this.isAndroidAppFrontend || this.isIOSAppFrontend; }
55
- /** Is this process the frontend of an iOS mobile application? */
56
- static get isIOSAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf("platform=ios") !== -1; }
57
- /** Is this process the frontend of an Android mobile application? */
58
- static get isAndroidAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf("platform=android") !== -1; }
59
- /** Is this process the backend of an iOS mobile application? */
60
- static get isIOSAppBackend() { return this.isNodeProcess && process.platform === "ios"; }
61
- /** Is this process the backend of an Android mobile application? */
62
- static get isAndroidAppBackend() { return this.isNodeProcess && process.platform === "android"; }
63
- /** Is this process a mobile app backend? */
64
- static get isMobileAppBackend() { return this.isIOSAppBackend || this.isAndroidAppBackend; }
65
- /** Is this process the frontend of a native (Electron or Mobile) app? */
66
- static get isNativeAppFrontend() { return this.isElectronAppFrontend || this.isMobileAppFrontend; }
67
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module ProcessDetector
7
+ */
8
+ /** Functions to determine the type of JavaScript process currently executing.
9
+ * @public
10
+ */
11
+ export class ProcessDetector {
12
+ /** Is this a browser process?
13
+ * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.
14
+ */
15
+ static get isBrowserProcess() { return typeof window === "object" && typeof window.navigator === "object"; }
16
+ /** Is this a Node process?
17
+ * @note this means "is this a backend process"? It will return `true` for all backend process, including Electron and mobile apps.
18
+ */
19
+ static get isNodeProcess() { return typeof process === "object" && undefined !== process.platform; }
20
+ /** Is this process the frontend of an Electron app? */
21
+ static get isElectronAppFrontend() { return typeof navigator === "object" && navigator.userAgent.toLowerCase().indexOf("electron") >= 0; }
22
+ /** Is this process the backend of an Electron app? */
23
+ static get isElectronAppBackend() { return typeof process === "object" && process.versions.hasOwnProperty("electron"); }
24
+ /** Is this process running in a browser on an iPad?
25
+ * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
26
+ */
27
+ static get isIPadBrowser() {
28
+ return this.isBrowserProcess && window.navigator.platform === "iPad" || (window.navigator.platform === "MacIntel" && window.navigator.maxTouchPoints > 0 && !("MSStream" in window)); /* eslint-disable-line deprecation/deprecation */
29
+ }
30
+ /** Is this process running in a browser on an iPhone?
31
+ * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
32
+ */
33
+ static get isIPhoneBrowser() { return this.isBrowserProcess && (/(iphone|ipod)/i.test(window.navigator.userAgent)); }
34
+ /** Is this process running in a browser on an iOS device?
35
+ * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.
36
+ */
37
+ static get isIOSBrowser() { return this.isIPadBrowser || this.isIPhoneBrowser; }
38
+ /** Is this process running in a browser on an Android device?
39
+ * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.
40
+ */
41
+ static get isAndroidBrowser() { return this.isBrowserProcess && /android/i.test(window.navigator.userAgent); }
42
+ /** Is this process running in a browser on a mobile device?
43
+ * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.
44
+ */
45
+ static get isMobileBrowser() { return this.isIOSBrowser || this.isAndroidBrowser; }
46
+ /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */
47
+ static get isChromium() {
48
+ return (this.isBrowserProcess && window.navigator.userAgent.indexOf("Chrome") > -1 && window.navigator.userAgent.indexOf("OP") === -1) || this.isElectronAppFrontend;
49
+ }
50
+ /** Is this process the frontend of an iTwin mobile application?
51
+ * @note this indicates that this is a browser process started by an iTwin mobile application.
52
+ * It will return `false` when running user-launched web browsers on a mobile device.
53
+ */
54
+ static get isMobileAppFrontend() { return this.isAndroidAppFrontend || this.isIOSAppFrontend; }
55
+ /** Is this process the frontend of an iOS mobile application? */
56
+ static get isIOSAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf("platform=ios") !== -1; }
57
+ /** Is this process the frontend of an Android mobile application? */
58
+ static get isAndroidAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf("platform=android") !== -1; }
59
+ /** Is this process the backend of an iOS mobile application? */
60
+ static get isIOSAppBackend() { return this.isNodeProcess && process.platform === "ios"; }
61
+ /** Is this process the backend of an Android mobile application? */
62
+ static get isAndroidAppBackend() { return this.isNodeProcess && process.platform === "android"; }
63
+ /** Is this process a mobile app backend? */
64
+ static get isMobileAppBackend() { return this.isIOSAppBackend || this.isAndroidAppBackend; }
65
+ /** Is this process the frontend of a native (Electron or Mobile) app? */
66
+ static get isNativeAppFrontend() { return this.isElectronAppFrontend || this.isMobileAppFrontend; }
67
+ }
68
68
  //# sourceMappingURL=ProcessDetector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ProcessDetector.js","sourceRoot":"","sources":["../../src/ProcessDetector.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module ProcessDetector\r\n */\r\n\r\n/** Functions to determine the type of JavaScript process currently executing.\r\n * @public\r\n */\r\nexport class ProcessDetector {\r\n\r\n /** Is this a browser process?\r\n * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.\r\n */\r\n public static get isBrowserProcess() { return typeof window === \"object\" && typeof window.navigator === \"object\"; }\r\n\r\n /** Is this a Node process?\r\n * @note this means \"is this a backend process\"? It will return `true` for all backend process, including Electron and mobile apps.\r\n */\r\n public static get isNodeProcess() { return typeof process === \"object\" && undefined !== process.platform; }\r\n\r\n /** Is this process the frontend of an Electron app? */\r\n public static get isElectronAppFrontend() { return typeof navigator === \"object\" && navigator.userAgent.toLowerCase().indexOf(\"electron\") >= 0; }\r\n\r\n /** Is this process the backend of an Electron app? */\r\n public static get isElectronAppBackend() { return typeof process === \"object\" && process.versions.hasOwnProperty(\"electron\"); }\r\n\r\n /** Is this process running in a browser on an iPad?\r\n * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\r\n */\r\n public static get isIPadBrowser() {\r\n return this.isBrowserProcess && window.navigator.platform === \"iPad\" || (window.navigator.platform === \"MacIntel\" && window.navigator.maxTouchPoints > 0 && !(\"MSStream\" in window)); /* eslint-disable-line deprecation/deprecation */\r\n }\r\n\r\n /** Is this process running in a browser on an iPhone?\r\n * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\r\n */\r\n public static get isIPhoneBrowser() { return this.isBrowserProcess && (/(iphone|ipod)/i.test(window.navigator.userAgent)); }\r\n\r\n /** Is this process running in a browser on an iOS device?\r\n * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\r\n */\r\n public static get isIOSBrowser() { return this.isIPadBrowser || this.isIPhoneBrowser; }\r\n\r\n /** Is this process running in a browser on an Android device?\r\n * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.\r\n */\r\n public static get isAndroidBrowser() { return this.isBrowserProcess && /android/i.test(window.navigator.userAgent); }\r\n\r\n /** Is this process running in a browser on a mobile device?\r\n * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.\r\n */\r\n public static get isMobileBrowser() { return this.isIOSBrowser || this.isAndroidBrowser; }\r\n\r\n /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */\r\n public static get isChromium() {\r\n return (this.isBrowserProcess && window.navigator.userAgent.indexOf(\"Chrome\") > -1 && window.navigator.userAgent.indexOf(\"OP\") === -1) || this.isElectronAppFrontend;\r\n }\r\n\r\n /** Is this process the frontend of an iTwin mobile application?\r\n * @note this indicates that this is a browser process started by an iTwin mobile application.\r\n * It will return `false` when running user-launched web browsers on a mobile device.\r\n */\r\n public static get isMobileAppFrontend() { return this.isAndroidAppFrontend || this.isIOSAppFrontend; }\r\n\r\n /** Is this process the frontend of an iOS mobile application? */\r\n public static get isIOSAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf(\"platform=ios\") !== -1; }\r\n\r\n /** Is this process the frontend of an Android mobile application? */\r\n public static get isAndroidAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf(\"platform=android\") !== -1; }\r\n\r\n /** Is this process the backend of an iOS mobile application? */\r\n public static get isIOSAppBackend() { return this.isNodeProcess && (process.platform as any) === \"ios\"; }\r\n\r\n /** Is this process the backend of an Android mobile application? */\r\n public static get isAndroidAppBackend() { return this.isNodeProcess && (process.platform as any) === \"android\"; }\r\n\r\n /** Is this process a mobile app backend? */\r\n public static get isMobileAppBackend() { return this.isIOSAppBackend || this.isAndroidAppBackend; }\r\n\r\n /** Is this process the frontend of a native (Electron or Mobile) app? */\r\n public static get isNativeAppFrontend() { return this.isElectronAppFrontend || this.isMobileAppFrontend; }\r\n}\r\n"]}
1
+ {"version":3,"file":"ProcessDetector.js","sourceRoot":"","sources":["../../src/ProcessDetector.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module ProcessDetector\n */\n\n/** Functions to determine the type of JavaScript process currently executing.\n * @public\n */\nexport class ProcessDetector {\n\n /** Is this a browser process?\n * @note this method will also return `true` for the frontend of Electron or Mobile apps. They *are* browser processes.\n */\n public static get isBrowserProcess() { return typeof window === \"object\" && typeof window.navigator === \"object\"; }\n\n /** Is this a Node process?\n * @note this means \"is this a backend process\"? It will return `true` for all backend process, including Electron and mobile apps.\n */\n public static get isNodeProcess() { return typeof process === \"object\" && undefined !== process.platform; }\n\n /** Is this process the frontend of an Electron app? */\n public static get isElectronAppFrontend() { return typeof navigator === \"object\" && navigator.userAgent.toLowerCase().indexOf(\"electron\") >= 0; }\n\n /** Is this process the backend of an Electron app? */\n public static get isElectronAppBackend() { return typeof process === \"object\" && process.versions.hasOwnProperty(\"electron\"); }\n\n /** Is this process running in a browser on an iPad?\n * @note This method will return `true` for any frontend running on an iPad, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\n */\n public static get isIPadBrowser() {\n return this.isBrowserProcess && window.navigator.platform === \"iPad\" || (window.navigator.platform === \"MacIntel\" && window.navigator.maxTouchPoints > 0 && !(\"MSStream\" in window)); /* eslint-disable-line deprecation/deprecation */\n }\n\n /** Is this process running in a browser on an iPhone?\n * @note This method will return `true` for any frontend running on an iPhone, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\n */\n public static get isIPhoneBrowser() { return this.isBrowserProcess && (/(iphone|ipod)/i.test(window.navigator.userAgent)); }\n\n /** Is this process running in a browser on an iOS device?\n * @note This method will return `true` for any frontend running on an iOS device, whether it is a user-launched web browser (e.g. Safari) or the frontend of a mobile app.\n */\n public static get isIOSBrowser() { return this.isIPadBrowser || this.isIPhoneBrowser; }\n\n /** Is this process running in a browser on an Android device?\n * @note This method will return `true` for any frontend running on an Android device, whether it is a user-launched web browser (e.g. Chrome) or the frontend of a mobile app.\n */\n public static get isAndroidBrowser() { return this.isBrowserProcess && /android/i.test(window.navigator.userAgent); }\n\n /** Is this process running in a browser on a mobile device?\n * @note This method will return `true` for any frontend running on a mobile device, whether it is a user-launched web browser or the frontend of a mobile app.\n */\n public static get isMobileBrowser() { return this.isIOSBrowser || this.isAndroidBrowser; }\n\n /** Is this process running in a Chromium based browser (Chrome / new Edge / Electron front end)? */\n public static get isChromium() {\n return (this.isBrowserProcess && window.navigator.userAgent.indexOf(\"Chrome\") > -1 && window.navigator.userAgent.indexOf(\"OP\") === -1) || this.isElectronAppFrontend;\n }\n\n /** Is this process the frontend of an iTwin mobile application?\n * @note this indicates that this is a browser process started by an iTwin mobile application.\n * It will return `false` when running user-launched web browsers on a mobile device.\n */\n public static get isMobileAppFrontend() { return this.isAndroidAppFrontend || this.isIOSAppFrontend; }\n\n /** Is this process the frontend of an iOS mobile application? */\n public static get isIOSAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf(\"platform=ios\") !== -1; }\n\n /** Is this process the frontend of an Android mobile application? */\n public static get isAndroidAppFrontend() { return this.isBrowserProcess && window.location.hash.indexOf(\"platform=android\") !== -1; }\n\n /** Is this process the backend of an iOS mobile application? */\n public static get isIOSAppBackend() { return this.isNodeProcess && (process.platform as any) === \"ios\"; }\n\n /** Is this process the backend of an Android mobile application? */\n public static get isAndroidAppBackend() { return this.isNodeProcess && (process.platform as any) === \"android\"; }\n\n /** Is this process a mobile app backend? */\n public static get isMobileAppBackend() { return this.isIOSAppBackend || this.isAndroidAppBackend; }\n\n /** Is this process the frontend of a native (Electron or Mobile) app? */\n public static get isNativeAppFrontend() { return this.isElectronAppFrontend || this.isMobileAppFrontend; }\n}\n"]}