@itwin/core-bentley 3.6.0-dev.8 → 3.6.1

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 (245) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/LICENSE.md +1 -1
  3. package/lib/cjs/AccessToken.d.ts +10 -8
  4. package/lib/cjs/AccessToken.d.ts.map +1 -1
  5. package/lib/cjs/AccessToken.js +9 -9
  6. package/lib/cjs/AccessToken.js.map +1 -1
  7. package/lib/cjs/Assert.d.ts +25 -25
  8. package/lib/cjs/Assert.js +45 -45
  9. package/lib/cjs/Assert.js.map +1 -1
  10. package/lib/cjs/BeEvent.d.ts +81 -81
  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 -94
  25. package/lib/cjs/ByteStream.d.ts.map +1 -1
  26. package/lib/cjs/ByteStream.js +159 -143
  27. package/lib/cjs/ByteStream.js.map +1 -1
  28. package/lib/cjs/ClassUtils.d.ts +14 -14
  29. package/lib/cjs/ClassUtils.js +27 -27
  30. package/lib/cjs/ClassUtils.js.map +1 -1
  31. package/lib/cjs/Compare.d.ts +47 -47
  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.js +428 -428
  36. package/lib/cjs/CompressedId64Set.js.map +1 -1
  37. package/lib/cjs/Dictionary.d.ts +125 -125
  38. package/lib/cjs/Dictionary.js +203 -203
  39. package/lib/cjs/Dictionary.js.map +1 -1
  40. package/lib/cjs/Disposable.d.ts +80 -80
  41. package/lib/cjs/Disposable.js +120 -120
  42. package/lib/cjs/Disposable.js.map +1 -1
  43. package/lib/cjs/Id.d.ts +285 -277
  44. package/lib/cjs/Id.d.ts.map +1 -1
  45. package/lib/cjs/Id.js +643 -629
  46. package/lib/cjs/Id.js.map +1 -1
  47. package/lib/cjs/IndexMap.d.ts +65 -65
  48. package/lib/cjs/IndexMap.js +91 -91
  49. package/lib/cjs/IndexMap.js.map +1 -1
  50. package/lib/cjs/JsonSchema.d.ts +77 -77
  51. package/lib/cjs/JsonSchema.js +9 -9
  52. package/lib/cjs/JsonSchema.js.map +1 -1
  53. package/lib/cjs/JsonUtils.d.ts +78 -78
  54. package/lib/cjs/JsonUtils.js +151 -151
  55. package/lib/cjs/JsonUtils.js.map +1 -1
  56. package/lib/cjs/LRUMap.d.ts +129 -129
  57. package/lib/cjs/LRUMap.js +333 -333
  58. package/lib/cjs/LRUMap.js.map +1 -1
  59. package/lib/cjs/Logger.d.ts +143 -143
  60. package/lib/cjs/Logger.js +258 -258
  61. package/lib/cjs/Logger.js.map +1 -1
  62. package/lib/cjs/ObservableSet.d.ts +23 -23
  63. package/lib/cjs/ObservableSet.js +51 -51
  64. package/lib/cjs/ObservableSet.js.map +1 -1
  65. package/lib/cjs/OneAtATimeAction.d.ts +31 -31
  66. package/lib/cjs/OneAtATimeAction.js +94 -94
  67. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  68. package/lib/cjs/OrderedId64Iterable.d.ts +74 -74
  69. package/lib/cjs/OrderedId64Iterable.js +235 -235
  70. package/lib/cjs/OrderedId64Iterable.js.map +1 -1
  71. package/lib/cjs/OrderedSet.d.ts +40 -40
  72. package/lib/cjs/OrderedSet.js +64 -64
  73. package/lib/cjs/OrderedSet.js.map +1 -1
  74. package/lib/cjs/PriorityQueue.d.ts +70 -70
  75. package/lib/cjs/PriorityQueue.js +140 -140
  76. package/lib/cjs/PriorityQueue.js.map +1 -1
  77. package/lib/cjs/ProcessDetector.d.ts +59 -59
  78. package/lib/cjs/ProcessDetector.js +71 -71
  79. package/lib/cjs/ProcessDetector.js.map +1 -1
  80. package/lib/cjs/SortedArray.d.ts +236 -232
  81. package/lib/cjs/SortedArray.d.ts.map +1 -1
  82. package/lib/cjs/SortedArray.js +315 -303
  83. package/lib/cjs/SortedArray.js.map +1 -1
  84. package/lib/cjs/StatusCategory.d.ts +30 -30
  85. package/lib/cjs/StatusCategory.js +460 -460
  86. package/lib/cjs/StatusCategory.js.map +1 -1
  87. package/lib/cjs/StringUtils.d.ts +22 -22
  88. package/lib/cjs/StringUtils.js +148 -148
  89. package/lib/cjs/StringUtils.js.map +1 -1
  90. package/lib/cjs/Time.d.ts +122 -122
  91. package/lib/cjs/Time.js +152 -152
  92. package/lib/cjs/Time.js.map +1 -1
  93. package/lib/cjs/Tracing.d.ts +40 -40
  94. package/lib/cjs/Tracing.js +130 -130
  95. package/lib/cjs/Tracing.js.map +1 -1
  96. package/lib/cjs/TupleKeyedMap.d.ts +36 -36
  97. package/lib/cjs/TupleKeyedMap.js +102 -102
  98. package/lib/cjs/TupleKeyedMap.js.map +1 -1
  99. package/lib/cjs/TypedArrayBuilder.d.ts +155 -97
  100. package/lib/cjs/TypedArrayBuilder.d.ts.map +1 -1
  101. package/lib/cjs/TypedArrayBuilder.js +208 -134
  102. package/lib/cjs/TypedArrayBuilder.js.map +1 -1
  103. package/lib/cjs/UnexpectedErrors.d.ts +43 -43
  104. package/lib/cjs/UnexpectedErrors.js +68 -68
  105. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  106. package/lib/cjs/UtilityTypes.d.ts +96 -100
  107. package/lib/cjs/UtilityTypes.d.ts.map +1 -1
  108. package/lib/cjs/UtilityTypes.js +40 -40
  109. package/lib/cjs/UtilityTypes.js.map +1 -1
  110. package/lib/cjs/YieldManager.d.ts +18 -18
  111. package/lib/cjs/YieldManager.js +34 -34
  112. package/lib/cjs/YieldManager.js.map +1 -1
  113. package/lib/cjs/core-bentley.d.ts +74 -75
  114. package/lib/cjs/core-bentley.d.ts.map +1 -1
  115. package/lib/cjs/core-bentley.js +90 -91
  116. package/lib/cjs/core-bentley.js.map +1 -1
  117. package/lib/cjs/partitionArray.d.ts +21 -21
  118. package/lib/cjs/partitionArray.js +43 -43
  119. package/lib/cjs/partitionArray.js.map +1 -1
  120. package/lib/esm/AccessToken.d.ts +10 -8
  121. package/lib/esm/AccessToken.d.ts.map +1 -1
  122. package/lib/esm/AccessToken.js +8 -8
  123. package/lib/esm/AccessToken.js.map +1 -1
  124. package/lib/esm/Assert.d.ts +25 -25
  125. package/lib/esm/Assert.js +41 -41
  126. package/lib/esm/Assert.js.map +1 -1
  127. package/lib/esm/BeEvent.d.ts +81 -81
  128. package/lib/esm/BeEvent.js +150 -150
  129. package/lib/esm/BeEvent.js.map +1 -1
  130. package/lib/esm/BeSQLite.d.ts +172 -170
  131. package/lib/esm/BeSQLite.d.ts.map +1 -1
  132. package/lib/esm/BeSQLite.js +182 -180
  133. package/lib/esm/BeSQLite.js.map +1 -1
  134. package/lib/esm/BentleyError.d.ts +378 -378
  135. package/lib/esm/BentleyError.d.ts.map +1 -1
  136. package/lib/esm/BentleyError.js +699 -698
  137. package/lib/esm/BentleyError.js.map +1 -1
  138. package/lib/esm/BentleyLoggerCategory.d.ts +11 -11
  139. package/lib/esm/BentleyLoggerCategory.js +16 -16
  140. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  141. package/lib/esm/ByteStream.d.ts +110 -94
  142. package/lib/esm/ByteStream.d.ts.map +1 -1
  143. package/lib/esm/ByteStream.js +155 -139
  144. package/lib/esm/ByteStream.js.map +1 -1
  145. package/lib/esm/ClassUtils.d.ts +14 -14
  146. package/lib/esm/ClassUtils.js +22 -22
  147. package/lib/esm/ClassUtils.js.map +1 -1
  148. package/lib/esm/Compare.d.ts +47 -47
  149. package/lib/esm/Compare.js +63 -63
  150. package/lib/esm/Compare.js.map +1 -1
  151. package/lib/esm/CompressedId64Set.d.ts +134 -134
  152. package/lib/esm/CompressedId64Set.js +423 -423
  153. package/lib/esm/CompressedId64Set.js.map +1 -1
  154. package/lib/esm/Dictionary.d.ts +125 -125
  155. package/lib/esm/Dictionary.js +199 -199
  156. package/lib/esm/Dictionary.js.map +1 -1
  157. package/lib/esm/Disposable.d.ts +80 -80
  158. package/lib/esm/Disposable.js +112 -112
  159. package/lib/esm/Disposable.js.map +1 -1
  160. package/lib/esm/Id.d.ts +285 -277
  161. package/lib/esm/Id.d.ts.map +1 -1
  162. package/lib/esm/Id.js +639 -625
  163. package/lib/esm/Id.js.map +1 -1
  164. package/lib/esm/IndexMap.d.ts +65 -65
  165. package/lib/esm/IndexMap.js +86 -86
  166. package/lib/esm/IndexMap.js.map +1 -1
  167. package/lib/esm/JsonSchema.d.ts +77 -77
  168. package/lib/esm/JsonSchema.js +8 -8
  169. package/lib/esm/JsonSchema.js.map +1 -1
  170. package/lib/esm/JsonUtils.d.ts +78 -78
  171. package/lib/esm/JsonUtils.js +148 -148
  172. package/lib/esm/JsonUtils.js.map +1 -1
  173. package/lib/esm/LRUMap.d.ts +129 -129
  174. package/lib/esm/LRUMap.js +326 -326
  175. package/lib/esm/LRUMap.js.map +1 -1
  176. package/lib/esm/Logger.d.ts +143 -143
  177. package/lib/esm/Logger.js +253 -253
  178. package/lib/esm/Logger.js.map +1 -1
  179. package/lib/esm/ObservableSet.d.ts +23 -23
  180. package/lib/esm/ObservableSet.js +47 -47
  181. package/lib/esm/ObservableSet.js.map +1 -1
  182. package/lib/esm/OneAtATimeAction.d.ts +31 -31
  183. package/lib/esm/OneAtATimeAction.js +89 -89
  184. package/lib/esm/OneAtATimeAction.js.map +1 -1
  185. package/lib/esm/OrderedId64Iterable.d.ts +74 -74
  186. package/lib/esm/OrderedId64Iterable.js +232 -232
  187. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  188. package/lib/esm/OrderedSet.d.ts +40 -40
  189. package/lib/esm/OrderedSet.js +59 -59
  190. package/lib/esm/OrderedSet.js.map +1 -1
  191. package/lib/esm/PriorityQueue.d.ts +70 -70
  192. package/lib/esm/PriorityQueue.js +136 -136
  193. package/lib/esm/PriorityQueue.js.map +1 -1
  194. package/lib/esm/ProcessDetector.d.ts +59 -59
  195. package/lib/esm/ProcessDetector.js +67 -67
  196. package/lib/esm/ProcessDetector.js.map +1 -1
  197. package/lib/esm/SortedArray.d.ts +236 -232
  198. package/lib/esm/SortedArray.d.ts.map +1 -1
  199. package/lib/esm/SortedArray.js +308 -296
  200. package/lib/esm/SortedArray.js.map +1 -1
  201. package/lib/esm/StatusCategory.d.ts +30 -30
  202. package/lib/esm/StatusCategory.js +454 -454
  203. package/lib/esm/StatusCategory.js.map +1 -1
  204. package/lib/esm/StringUtils.d.ts +22 -22
  205. package/lib/esm/StringUtils.js +142 -142
  206. package/lib/esm/StringUtils.js.map +1 -1
  207. package/lib/esm/Time.d.ts +122 -122
  208. package/lib/esm/Time.js +146 -146
  209. package/lib/esm/Time.js.map +1 -1
  210. package/lib/esm/Tracing.d.ts +40 -40
  211. package/lib/esm/Tracing.js +126 -126
  212. package/lib/esm/Tracing.js.map +1 -1
  213. package/lib/esm/TupleKeyedMap.d.ts +36 -36
  214. package/lib/esm/TupleKeyedMap.js +98 -98
  215. package/lib/esm/TupleKeyedMap.js.map +1 -1
  216. package/lib/esm/TypedArrayBuilder.d.ts +155 -97
  217. package/lib/esm/TypedArrayBuilder.d.ts.map +1 -1
  218. package/lib/esm/TypedArrayBuilder.js +200 -127
  219. package/lib/esm/TypedArrayBuilder.js.map +1 -1
  220. package/lib/esm/UnexpectedErrors.d.ts +43 -43
  221. package/lib/esm/UnexpectedErrors.js +64 -64
  222. package/lib/esm/UnexpectedErrors.js.map +1 -1
  223. package/lib/esm/UtilityTypes.d.ts +96 -100
  224. package/lib/esm/UtilityTypes.d.ts.map +1 -1
  225. package/lib/esm/UtilityTypes.js +34 -34
  226. package/lib/esm/UtilityTypes.js.map +1 -1
  227. package/lib/esm/YieldManager.d.ts +18 -18
  228. package/lib/esm/YieldManager.js +30 -30
  229. package/lib/esm/YieldManager.js.map +1 -1
  230. package/lib/esm/core-bentley.d.ts +74 -75
  231. package/lib/esm/core-bentley.d.ts.map +1 -1
  232. package/lib/esm/core-bentley.js +78 -79
  233. package/lib/esm/core-bentley.js.map +1 -1
  234. package/lib/esm/partitionArray.d.ts +21 -21
  235. package/lib/esm/partitionArray.js +39 -39
  236. package/lib/esm/partitionArray.js.map +1 -1
  237. package/package.json +3 -3
  238. package/lib/cjs/AsyncMutex.d.ts +0 -27
  239. package/lib/cjs/AsyncMutex.d.ts.map +0 -1
  240. package/lib/cjs/AsyncMutex.js +0 -44
  241. package/lib/cjs/AsyncMutex.js.map +0 -1
  242. package/lib/esm/AsyncMutex.d.ts +0 -27
  243. package/lib/esm/AsyncMutex.d.ts.map +0 -1
  244. package/lib/esm/AsyncMutex.js +0 -40
  245. package/lib/esm/AsyncMutex.js.map +0 -1
@@ -1,157 +1,157 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- /** @packageDocumentation
7
- * @module Events
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.BeEventList = exports.BeUiEvent = exports.BeEvent = void 0;
11
- const UnexpectedErrors_1 = require("./UnexpectedErrors");
12
- /**
13
- * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
14
- * This class is usually instantiated inside of a container class and
15
- * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
16
- * @public
17
- */
18
- class BeEvent {
19
- constructor() {
20
- this._listeners = [];
21
- this._insideRaiseEvent = false;
22
- }
23
- /** The number of listeners currently subscribed to the event. */
24
- get numberOfListeners() { return this._listeners.length; }
25
- /**
26
- * Registers a Listener to be executed whenever this event is raised.
27
- * @param listener The function to be executed when the event is raised.
28
- * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
29
- * @returns A function that will remove this event listener.
30
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
31
- */
32
- addListener(listener, scope) {
33
- this._listeners.push({ listener, scope, once: false });
34
- return () => this.removeListener(listener, scope);
35
- }
36
- /**
37
- * Registers a callback function to be executed *only once* when the event is raised.
38
- * @param listener The function to be executed once when the event is raised.
39
- * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
40
- * @returns A function that will remove this event listener.
41
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
42
- */
43
- addOnce(listener, scope) {
44
- this._listeners.push({ listener, scope, once: true });
45
- return () => this.removeListener(listener, scope);
46
- }
47
- /**
48
- * Un-register a previously registered listener.
49
- * @param listener The listener to be unregistered.
50
- * @param scope The scope that was originally passed to addListener.
51
- * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
52
- * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
53
- */
54
- removeListener(listener, scope) {
55
- const listeners = this._listeners;
56
- for (let i = 0; i < listeners.length; ++i) {
57
- const context = listeners[i];
58
- if (context.listener === listener && context.scope === scope) {
59
- if (this._insideRaiseEvent) {
60
- context.listener = undefined;
61
- }
62
- else {
63
- listeners.splice(i, 1);
64
- }
65
- return true;
66
- }
67
- }
68
- return false;
69
- }
70
- /**
71
- * Raises the event by calling each registered listener with the supplied arguments.
72
- * @param args This method takes any number of parameters and passes them through to the listeners.
73
- * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
74
- */
75
- raiseEvent(...args) {
76
- this._insideRaiseEvent = true;
77
- const listeners = this._listeners;
78
- const length = listeners.length;
79
- let dropped = false;
80
- for (let i = 0; i < length; ++i) {
81
- const context = listeners[i];
82
- if (!context.listener) {
83
- dropped = true;
84
- }
85
- else {
86
- try {
87
- context.listener.apply(context.scope, args);
88
- }
89
- catch (e) {
90
- UnexpectedErrors_1.UnexpectedErrors.handle(e);
91
- }
92
- if (context.once) {
93
- context.listener = undefined;
94
- dropped = true;
95
- }
96
- }
97
- }
98
- // if we had dropped listeners, remove them now
99
- if (dropped)
100
- this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);
101
- this._insideRaiseEvent = false;
102
- }
103
- /** Determine whether this BeEvent has a specified listener registered.
104
- * @param listener The listener to check.
105
- * @param scope optional scope argument to match call to addListener
106
- */
107
- has(listener, scope) {
108
- for (const ctx of this._listeners) {
109
- if (ctx.listener === listener && ctx.scope === scope) {
110
- return true;
111
- }
112
- }
113
- return false;
114
- }
115
- /** Clear all Listeners from this BeEvent. */
116
- clear() { this._listeners.length = 0; }
117
- }
118
- exports.BeEvent = BeEvent;
119
- /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
120
- * @public
121
- */
122
- class BeUiEvent extends BeEvent {
123
- /** Raises event with single strongly typed argument. */
124
- emit(args) { this.raiseEvent(args); }
125
- }
126
- exports.BeUiEvent = BeUiEvent;
127
- /**
128
- * A list of BeEvent objects, accessible by an event name.
129
- * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
130
- * @public
131
- */
132
- class BeEventList {
133
- constructor() {
134
- this._events = {};
135
- }
136
- /**
137
- * Gets the event associated with the specified name, creating the event if it does not already exist.
138
- * @param name The name of the event.
139
- */
140
- get(name) {
141
- let event = this._events[name];
142
- if (event)
143
- return event;
144
- event = new BeEvent();
145
- this._events[name] = event;
146
- return event;
147
- }
148
- /**
149
- * Removes the event associated with a name.
150
- * @param name The name of the event.
151
- */
152
- remove(name) {
153
- this._events[name] = undefined;
154
- }
155
- }
156
- exports.BeEventList = BeEventList;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module Events
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.BeEventList = exports.BeUiEvent = exports.BeEvent = void 0;
11
+ const UnexpectedErrors_1 = require("./UnexpectedErrors");
12
+ /**
13
+ * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
14
+ * This class is usually instantiated inside of a container class and
15
+ * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
16
+ * @public
17
+ */
18
+ class BeEvent {
19
+ constructor() {
20
+ this._listeners = [];
21
+ this._insideRaiseEvent = false;
22
+ }
23
+ /** The number of listeners currently subscribed to the event. */
24
+ get numberOfListeners() { return this._listeners.length; }
25
+ /**
26
+ * Registers a Listener to be executed whenever this event is raised.
27
+ * @param listener The function to be executed when the event is raised.
28
+ * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
29
+ * @returns A function that will remove this event listener.
30
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
31
+ */
32
+ addListener(listener, scope) {
33
+ this._listeners.push({ listener, scope, once: false });
34
+ return () => this.removeListener(listener, scope);
35
+ }
36
+ /**
37
+ * Registers a callback function to be executed *only once* when the event is raised.
38
+ * @param listener The function to be executed once when the event is raised.
39
+ * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
40
+ * @returns A function that will remove this event listener.
41
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
42
+ */
43
+ addOnce(listener, scope) {
44
+ this._listeners.push({ listener, scope, once: true });
45
+ return () => this.removeListener(listener, scope);
46
+ }
47
+ /**
48
+ * Un-register a previously registered listener.
49
+ * @param listener The listener to be unregistered.
50
+ * @param scope The scope that was originally passed to addListener.
51
+ * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
52
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
53
+ */
54
+ removeListener(listener, scope) {
55
+ const listeners = this._listeners;
56
+ for (let i = 0; i < listeners.length; ++i) {
57
+ const context = listeners[i];
58
+ if (context.listener === listener && context.scope === scope) {
59
+ if (this._insideRaiseEvent) {
60
+ context.listener = undefined;
61
+ }
62
+ else {
63
+ listeners.splice(i, 1);
64
+ }
65
+ return true;
66
+ }
67
+ }
68
+ return false;
69
+ }
70
+ /**
71
+ * Raises the event by calling each registered listener with the supplied arguments.
72
+ * @param args This method takes any number of parameters and passes them through to the listeners.
73
+ * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
74
+ */
75
+ raiseEvent(...args) {
76
+ this._insideRaiseEvent = true;
77
+ const listeners = this._listeners;
78
+ const length = listeners.length;
79
+ let dropped = false;
80
+ for (let i = 0; i < length; ++i) {
81
+ const context = listeners[i];
82
+ if (!context.listener) {
83
+ dropped = true;
84
+ }
85
+ else {
86
+ try {
87
+ context.listener.apply(context.scope, args);
88
+ }
89
+ catch (e) {
90
+ UnexpectedErrors_1.UnexpectedErrors.handle(e);
91
+ }
92
+ if (context.once) {
93
+ context.listener = undefined;
94
+ dropped = true;
95
+ }
96
+ }
97
+ }
98
+ // if we had dropped listeners, remove them now
99
+ if (dropped)
100
+ this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);
101
+ this._insideRaiseEvent = false;
102
+ }
103
+ /** Determine whether this BeEvent has a specified listener registered.
104
+ * @param listener The listener to check.
105
+ * @param scope optional scope argument to match call to addListener
106
+ */
107
+ has(listener, scope) {
108
+ for (const ctx of this._listeners) {
109
+ if (ctx.listener === listener && ctx.scope === scope) {
110
+ return true;
111
+ }
112
+ }
113
+ return false;
114
+ }
115
+ /** Clear all Listeners from this BeEvent. */
116
+ clear() { this._listeners.length = 0; }
117
+ }
118
+ exports.BeEvent = BeEvent;
119
+ /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
120
+ * @public
121
+ */
122
+ class BeUiEvent extends BeEvent {
123
+ /** Raises event with single strongly typed argument. */
124
+ emit(args) { this.raiseEvent(args); }
125
+ }
126
+ exports.BeUiEvent = BeUiEvent;
127
+ /**
128
+ * A list of BeEvent objects, accessible by an event name.
129
+ * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
130
+ * @public
131
+ */
132
+ class BeEventList {
133
+ constructor() {
134
+ this._events = {};
135
+ }
136
+ /**
137
+ * Gets the event associated with the specified name, creating the event if it does not already exist.
138
+ * @param name The name of the event.
139
+ */
140
+ get(name) {
141
+ let event = this._events[name];
142
+ if (event)
143
+ return event;
144
+ event = new BeEvent();
145
+ this._events[name] = event;
146
+ return event;
147
+ }
148
+ /**
149
+ * Removes the event associated with a name.
150
+ * @param name The name of the event.
151
+ */
152
+ remove(name) {
153
+ this._events[name] = undefined;
154
+ }
155
+ }
156
+ exports.BeEventList = BeEventList;
157
157
  //# sourceMappingURL=BeEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BeEvent.js","sourceRoot":"","sources":["../../src/BeEvent.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 Events\r\n */\r\n\r\nimport { UnexpectedErrors } from \"./UnexpectedErrors\";\r\n\r\n/** A function invoked when a BeEvent is raised.\r\n * @public\r\n */\r\nexport type Listener = (...arg: any[]) => void;\r\n\r\ninterface EventContext {\r\n listener: Listener | undefined;\r\n scope: any;\r\n once: boolean;\r\n}\r\n\r\n/**\r\n * Manages a set of *listeners* for a particular event and notifies them when the event is raised.\r\n * This class is usually instantiated inside of a container class and\r\n * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].\r\n * @public\r\n */\r\nexport class BeEvent<T extends Listener> {\r\n private _listeners: EventContext[] = [];\r\n private _insideRaiseEvent: boolean = false;\r\n\r\n /** The number of listeners currently subscribed to the event. */\r\n public get numberOfListeners() { return this._listeners.length; }\r\n\r\n /**\r\n * Registers a Listener to be executed whenever this event is raised.\r\n * @param listener The function to be executed when the event is raised.\r\n * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.\r\n * @returns A function that will remove this event listener.\r\n * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]\r\n */\r\n public addListener(listener: T, scope?: any): () => void {\r\n this._listeners.push({ listener, scope, once: false });\r\n return () => this.removeListener(listener, scope);\r\n }\r\n\r\n /**\r\n * Registers a callback function to be executed *only once* when the event is raised.\r\n * @param listener The function to be executed once when the event is raised.\r\n * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.\r\n * @returns A function that will remove this event listener.\r\n * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]\r\n */\r\n public addOnce(listener: T, scope?: any): () => void {\r\n this._listeners.push({ listener, scope, once: true });\r\n return () => this.removeListener(listener, scope);\r\n }\r\n\r\n /**\r\n * Un-register a previously registered listener.\r\n * @param listener The listener to be unregistered.\r\n * @param scope The scope that was originally passed to addListener.\r\n * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.\r\n * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]\r\n */\r\n public removeListener(listener: T, scope?: any): boolean {\r\n const listeners = this._listeners;\r\n\r\n for (let i = 0; i < listeners.length; ++i) {\r\n const context = listeners[i];\r\n if (context.listener === listener && context.scope === scope) {\r\n if (this._insideRaiseEvent) {\r\n context.listener = undefined;\r\n } else {\r\n listeners.splice(i, 1);\r\n }\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Raises the event by calling each registered listener with the supplied arguments.\r\n * @param args This method takes any number of parameters and passes them through to the listeners.\r\n * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]\r\n */\r\n public raiseEvent(...args: Parameters<T>) {\r\n this._insideRaiseEvent = true;\r\n\r\n const listeners = this._listeners;\r\n const length = listeners.length;\r\n let dropped = false;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n const context = listeners[i];\r\n if (!context.listener) {\r\n dropped = true;\r\n } else {\r\n try {\r\n context.listener.apply(context.scope, args);\r\n } catch (e) {\r\n UnexpectedErrors.handle(e);\r\n }\r\n if (context.once) {\r\n context.listener = undefined;\r\n dropped = true;\r\n }\r\n }\r\n }\r\n\r\n // if we had dropped listeners, remove them now\r\n if (dropped)\r\n this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);\r\n\r\n this._insideRaiseEvent = false;\r\n }\r\n\r\n /** Determine whether this BeEvent has a specified listener registered.\r\n * @param listener The listener to check.\r\n * @param scope optional scope argument to match call to addListener\r\n */\r\n public has(listener: T, scope?: any): boolean {\r\n for (const ctx of this._listeners) {\r\n if (ctx.listener === listener && ctx.scope === scope) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Clear all Listeners from this BeEvent. */\r\n public clear(): void { this._listeners.length = 0; }\r\n}\r\n\r\n/** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.\r\n * @public\r\n */\r\nexport class BeUiEvent<TEventArgs> extends BeEvent<(args: TEventArgs) => void> {\r\n /** Raises event with single strongly typed argument. */\r\n public emit(args: TEventArgs): void { this.raiseEvent(args); }\r\n}\r\n\r\n/**\r\n * A list of BeEvent objects, accessible by an event name.\r\n * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.\r\n * @public\r\n */\r\nexport class BeEventList<T extends Listener> {\r\n private _events: { [name: string]: BeEvent<T> | undefined } = {};\r\n\r\n /**\r\n * Gets the event associated with the specified name, creating the event if it does not already exist.\r\n * @param name The name of the event.\r\n */\r\n public get(name: string): BeEvent<T> {\r\n let event = this._events[name];\r\n if (event)\r\n return event;\r\n\r\n event = new BeEvent();\r\n this._events[name] = event;\r\n return event;\r\n }\r\n\r\n /**\r\n * Removes the event associated with a name.\r\n * @param name The name of the event.\r\n */\r\n public remove(name: string): void {\r\n this._events[name] = undefined;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"BeEvent.js","sourceRoot":"","sources":["../../src/BeEvent.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 Events\n */\n\nimport { UnexpectedErrors } from \"./UnexpectedErrors\";\n\n/** A function invoked when a BeEvent is raised.\n * @public\n */\nexport type Listener = (...arg: any[]) => void;\n\ninterface EventContext {\n listener: Listener | undefined;\n scope: any;\n once: boolean;\n}\n\n/**\n * Manages a set of *listeners* for a particular event and notifies them when the event is raised.\n * This class is usually instantiated inside of a container class and\n * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].\n * @public\n */\nexport class BeEvent<T extends Listener> {\n private _listeners: EventContext[] = [];\n private _insideRaiseEvent: boolean = false;\n\n /** The number of listeners currently subscribed to the event. */\n public get numberOfListeners() { return this._listeners.length; }\n\n /**\n * Registers a Listener to be executed whenever this event is raised.\n * @param listener The function to be executed when the event is raised.\n * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.\n * @returns A function that will remove this event listener.\n * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]\n */\n public addListener(listener: T, scope?: any): () => void {\n this._listeners.push({ listener, scope, once: false });\n return () => this.removeListener(listener, scope);\n }\n\n /**\n * Registers a callback function to be executed *only once* when the event is raised.\n * @param listener The function to be executed once when the event is raised.\n * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.\n * @returns A function that will remove this event listener.\n * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]\n */\n public addOnce(listener: T, scope?: any): () => void {\n this._listeners.push({ listener, scope, once: true });\n return () => this.removeListener(listener, scope);\n }\n\n /**\n * Un-register a previously registered listener.\n * @param listener The listener to be unregistered.\n * @param scope The scope that was originally passed to addListener.\n * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.\n * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]\n */\n public removeListener(listener: T, scope?: any): boolean {\n const listeners = this._listeners;\n\n for (let i = 0; i < listeners.length; ++i) {\n const context = listeners[i];\n if (context.listener === listener && context.scope === scope) {\n if (this._insideRaiseEvent) {\n context.listener = undefined;\n } else {\n listeners.splice(i, 1);\n }\n return true;\n }\n }\n return false;\n }\n\n /**\n * Raises the event by calling each registered listener with the supplied arguments.\n * @param args This method takes any number of parameters and passes them through to the listeners.\n * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]\n */\n public raiseEvent(...args: Parameters<T>) {\n this._insideRaiseEvent = true;\n\n const listeners = this._listeners;\n const length = listeners.length;\n let dropped = false;\n\n for (let i = 0; i < length; ++i) {\n const context = listeners[i];\n if (!context.listener) {\n dropped = true;\n } else {\n try {\n context.listener.apply(context.scope, args);\n } catch (e) {\n UnexpectedErrors.handle(e);\n }\n if (context.once) {\n context.listener = undefined;\n dropped = true;\n }\n }\n }\n\n // if we had dropped listeners, remove them now\n if (dropped)\n this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);\n\n this._insideRaiseEvent = false;\n }\n\n /** Determine whether this BeEvent has a specified listener registered.\n * @param listener The listener to check.\n * @param scope optional scope argument to match call to addListener\n */\n public has(listener: T, scope?: any): boolean {\n for (const ctx of this._listeners) {\n if (ctx.listener === listener && ctx.scope === scope) {\n return true;\n }\n }\n return false;\n }\n\n /** Clear all Listeners from this BeEvent. */\n public clear(): void { this._listeners.length = 0; }\n}\n\n/** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.\n * @public\n */\nexport class BeUiEvent<TEventArgs> extends BeEvent<(args: TEventArgs) => void> {\n /** Raises event with single strongly typed argument. */\n public emit(args: TEventArgs): void { this.raiseEvent(args); }\n}\n\n/**\n * A list of BeEvent objects, accessible by an event name.\n * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.\n * @public\n */\nexport class BeEventList<T extends Listener> {\n private _events: { [name: string]: BeEvent<T> | undefined } = {};\n\n /**\n * Gets the event associated with the specified name, creating the event if it does not already exist.\n * @param name The name of the event.\n */\n public get(name: string): BeEvent<T> {\n let event = this._events[name];\n if (event)\n return event;\n\n event = new BeEvent();\n this._events[name] = event;\n return event;\n }\n\n /**\n * Removes the event associated with a name.\n * @param name The name of the event.\n */\n public remove(name: string): void {\n this._events[name] = undefined;\n }\n}\n"]}