@itwin/core-bentley 3.5.0-dev.26 → 3.5.0-dev.27

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 (223) hide show
  1. package/lib/cjs/AccessToken.d.ts +8 -8
  2. package/lib/cjs/AccessToken.js +9 -9
  3. package/lib/cjs/AccessToken.js.map +1 -1
  4. package/lib/cjs/Assert.d.ts +25 -25
  5. package/lib/cjs/Assert.js +45 -45
  6. package/lib/cjs/Assert.js.map +1 -1
  7. package/lib/cjs/AsyncMutex.d.ts +26 -26
  8. package/lib/cjs/AsyncMutex.js +43 -43
  9. package/lib/cjs/AsyncMutex.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 +170 -170
  14. package/lib/cjs/BeSQLite.js +183 -183
  15. package/lib/cjs/BeSQLite.js.map +1 -1
  16. package/lib/cjs/BentleyError.d.ts +376 -376
  17. package/lib/cjs/BentleyError.js +699 -699
  18. package/lib/cjs/BentleyError.js.map +1 -1
  19. package/lib/cjs/BentleyLoggerCategory.d.ts +11 -11
  20. package/lib/cjs/BentleyLoggerCategory.js +19 -19
  21. package/lib/cjs/BentleyLoggerCategory.js.map +1 -1
  22. package/lib/cjs/ByteStream.d.ts +92 -92
  23. package/lib/cjs/ByteStream.js +133 -133
  24. package/lib/cjs/ByteStream.js.map +1 -1
  25. package/lib/cjs/ClassUtils.d.ts +14 -14
  26. package/lib/cjs/ClassUtils.js +27 -27
  27. package/lib/cjs/ClassUtils.js.map +1 -1
  28. package/lib/cjs/Compare.d.ts +47 -47
  29. package/lib/cjs/Compare.js +75 -75
  30. package/lib/cjs/Compare.js.map +1 -1
  31. package/lib/cjs/CompressedId64Set.d.ts +134 -134
  32. package/lib/cjs/CompressedId64Set.js +428 -428
  33. package/lib/cjs/CompressedId64Set.js.map +1 -1
  34. package/lib/cjs/Dictionary.d.ts +125 -125
  35. package/lib/cjs/Dictionary.js +203 -203
  36. package/lib/cjs/Dictionary.js.map +1 -1
  37. package/lib/cjs/Disposable.d.ts +80 -80
  38. package/lib/cjs/Disposable.js +120 -120
  39. package/lib/cjs/Disposable.js.map +1 -1
  40. package/lib/cjs/Id.d.ts +277 -277
  41. package/lib/cjs/Id.js +629 -629
  42. package/lib/cjs/Id.js.map +1 -1
  43. package/lib/cjs/IndexMap.d.ts +65 -65
  44. package/lib/cjs/IndexMap.js +91 -91
  45. package/lib/cjs/IndexMap.js.map +1 -1
  46. package/lib/cjs/JsonSchema.d.ts +77 -77
  47. package/lib/cjs/JsonSchema.js +9 -9
  48. package/lib/cjs/JsonSchema.js.map +1 -1
  49. package/lib/cjs/JsonUtils.d.ts +78 -78
  50. package/lib/cjs/JsonUtils.js +151 -151
  51. package/lib/cjs/JsonUtils.js.map +1 -1
  52. package/lib/cjs/LRUMap.d.ts +129 -129
  53. package/lib/cjs/LRUMap.js +333 -333
  54. package/lib/cjs/LRUMap.js.map +1 -1
  55. package/lib/cjs/Logger.d.ts +141 -141
  56. package/lib/cjs/Logger.js +254 -254
  57. package/lib/cjs/Logger.js.map +1 -1
  58. package/lib/cjs/ObservableSet.d.ts +23 -23
  59. package/lib/cjs/ObservableSet.js +51 -51
  60. package/lib/cjs/ObservableSet.js.map +1 -1
  61. package/lib/cjs/OneAtATimeAction.d.ts +31 -31
  62. package/lib/cjs/OneAtATimeAction.js +94 -94
  63. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  64. package/lib/cjs/OrderedId64Iterable.d.ts +74 -74
  65. package/lib/cjs/OrderedId64Iterable.js +235 -235
  66. package/lib/cjs/OrderedId64Iterable.js.map +1 -1
  67. package/lib/cjs/OrderedSet.d.ts +40 -40
  68. package/lib/cjs/OrderedSet.js +64 -64
  69. package/lib/cjs/OrderedSet.js.map +1 -1
  70. package/lib/cjs/PriorityQueue.d.ts +70 -70
  71. package/lib/cjs/PriorityQueue.js +140 -140
  72. package/lib/cjs/PriorityQueue.js.map +1 -1
  73. package/lib/cjs/ProcessDetector.d.ts +59 -59
  74. package/lib/cjs/ProcessDetector.js +71 -71
  75. package/lib/cjs/ProcessDetector.js.map +1 -1
  76. package/lib/cjs/SortedArray.d.ts +232 -232
  77. package/lib/cjs/SortedArray.js +303 -303
  78. package/lib/cjs/SortedArray.js.map +1 -1
  79. package/lib/cjs/StatusCategory.d.ts +30 -30
  80. package/lib/cjs/StatusCategory.js +460 -460
  81. package/lib/cjs/StatusCategory.js.map +1 -1
  82. package/lib/cjs/StringUtils.d.ts +22 -22
  83. package/lib/cjs/StringUtils.js +148 -148
  84. package/lib/cjs/StringUtils.js.map +1 -1
  85. package/lib/cjs/Time.d.ts +122 -122
  86. package/lib/cjs/Time.js +152 -152
  87. package/lib/cjs/Time.js.map +1 -1
  88. package/lib/cjs/Tracing.d.ts +40 -40
  89. package/lib/cjs/Tracing.js +130 -130
  90. package/lib/cjs/Tracing.js.map +1 -1
  91. package/lib/cjs/TupleKeyedMap.d.ts +36 -36
  92. package/lib/cjs/TupleKeyedMap.js +102 -102
  93. package/lib/cjs/TupleKeyedMap.js.map +1 -1
  94. package/lib/cjs/TypedArrayBuilder.d.ts +97 -97
  95. package/lib/cjs/TypedArrayBuilder.js +134 -134
  96. package/lib/cjs/TypedArrayBuilder.js.map +1 -1
  97. package/lib/cjs/UnexpectedErrors.d.ts +43 -43
  98. package/lib/cjs/UnexpectedErrors.js +68 -68
  99. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  100. package/lib/cjs/UtilityTypes.d.ts +100 -100
  101. package/lib/cjs/UtilityTypes.js +40 -40
  102. package/lib/cjs/UtilityTypes.js.map +1 -1
  103. package/lib/cjs/YieldManager.d.ts +18 -18
  104. package/lib/cjs/YieldManager.js +34 -34
  105. package/lib/cjs/YieldManager.js.map +1 -1
  106. package/lib/cjs/core-bentley.d.ts +75 -75
  107. package/lib/cjs/core-bentley.js +91 -91
  108. package/lib/cjs/core-bentley.js.map +1 -1
  109. package/lib/cjs/partitionArray.d.ts +21 -21
  110. package/lib/cjs/partitionArray.js +43 -43
  111. package/lib/cjs/partitionArray.js.map +1 -1
  112. package/lib/esm/AccessToken.d.ts +8 -8
  113. package/lib/esm/AccessToken.js +8 -8
  114. package/lib/esm/AccessToken.js.map +1 -1
  115. package/lib/esm/Assert.d.ts +25 -25
  116. package/lib/esm/Assert.js +41 -41
  117. package/lib/esm/Assert.js.map +1 -1
  118. package/lib/esm/AsyncMutex.d.ts +26 -26
  119. package/lib/esm/AsyncMutex.js +39 -39
  120. package/lib/esm/AsyncMutex.js.map +1 -1
  121. package/lib/esm/BeEvent.d.ts +81 -81
  122. package/lib/esm/BeEvent.js +150 -150
  123. package/lib/esm/BeEvent.js.map +1 -1
  124. package/lib/esm/BeSQLite.d.ts +170 -170
  125. package/lib/esm/BeSQLite.js +180 -180
  126. package/lib/esm/BeSQLite.js.map +1 -1
  127. package/lib/esm/BentleyError.d.ts +376 -376
  128. package/lib/esm/BentleyError.js +695 -695
  129. package/lib/esm/BentleyError.js.map +1 -1
  130. package/lib/esm/BentleyLoggerCategory.d.ts +11 -11
  131. package/lib/esm/BentleyLoggerCategory.js +16 -16
  132. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  133. package/lib/esm/ByteStream.d.ts +92 -92
  134. package/lib/esm/ByteStream.js +129 -129
  135. package/lib/esm/ByteStream.js.map +1 -1
  136. package/lib/esm/ClassUtils.d.ts +14 -14
  137. package/lib/esm/ClassUtils.js +22 -22
  138. package/lib/esm/ClassUtils.js.map +1 -1
  139. package/lib/esm/Compare.d.ts +47 -47
  140. package/lib/esm/Compare.js +63 -63
  141. package/lib/esm/Compare.js.map +1 -1
  142. package/lib/esm/CompressedId64Set.d.ts +134 -134
  143. package/lib/esm/CompressedId64Set.js +423 -423
  144. package/lib/esm/CompressedId64Set.js.map +1 -1
  145. package/lib/esm/Dictionary.d.ts +125 -125
  146. package/lib/esm/Dictionary.js +199 -199
  147. package/lib/esm/Dictionary.js.map +1 -1
  148. package/lib/esm/Disposable.d.ts +80 -80
  149. package/lib/esm/Disposable.js +112 -112
  150. package/lib/esm/Disposable.js.map +1 -1
  151. package/lib/esm/Id.d.ts +277 -277
  152. package/lib/esm/Id.js +625 -625
  153. package/lib/esm/Id.js.map +1 -1
  154. package/lib/esm/IndexMap.d.ts +65 -65
  155. package/lib/esm/IndexMap.js +86 -86
  156. package/lib/esm/IndexMap.js.map +1 -1
  157. package/lib/esm/JsonSchema.d.ts +77 -77
  158. package/lib/esm/JsonSchema.js +8 -8
  159. package/lib/esm/JsonSchema.js.map +1 -1
  160. package/lib/esm/JsonUtils.d.ts +78 -78
  161. package/lib/esm/JsonUtils.js +148 -148
  162. package/lib/esm/JsonUtils.js.map +1 -1
  163. package/lib/esm/LRUMap.d.ts +129 -129
  164. package/lib/esm/LRUMap.js +326 -326
  165. package/lib/esm/LRUMap.js.map +1 -1
  166. package/lib/esm/Logger.d.ts +141 -141
  167. package/lib/esm/Logger.js +249 -249
  168. package/lib/esm/Logger.js.map +1 -1
  169. package/lib/esm/ObservableSet.d.ts +23 -23
  170. package/lib/esm/ObservableSet.js +47 -47
  171. package/lib/esm/ObservableSet.js.map +1 -1
  172. package/lib/esm/OneAtATimeAction.d.ts +31 -31
  173. package/lib/esm/OneAtATimeAction.js +89 -89
  174. package/lib/esm/OneAtATimeAction.js.map +1 -1
  175. package/lib/esm/OrderedId64Iterable.d.ts +74 -74
  176. package/lib/esm/OrderedId64Iterable.js +232 -232
  177. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  178. package/lib/esm/OrderedSet.d.ts +40 -40
  179. package/lib/esm/OrderedSet.js +59 -59
  180. package/lib/esm/OrderedSet.js.map +1 -1
  181. package/lib/esm/PriorityQueue.d.ts +70 -70
  182. package/lib/esm/PriorityQueue.js +136 -136
  183. package/lib/esm/PriorityQueue.js.map +1 -1
  184. package/lib/esm/ProcessDetector.d.ts +59 -59
  185. package/lib/esm/ProcessDetector.js +67 -67
  186. package/lib/esm/ProcessDetector.js.map +1 -1
  187. package/lib/esm/SortedArray.d.ts +232 -232
  188. package/lib/esm/SortedArray.js +296 -296
  189. package/lib/esm/SortedArray.js.map +1 -1
  190. package/lib/esm/StatusCategory.d.ts +30 -30
  191. package/lib/esm/StatusCategory.js +454 -454
  192. package/lib/esm/StatusCategory.js.map +1 -1
  193. package/lib/esm/StringUtils.d.ts +22 -22
  194. package/lib/esm/StringUtils.js +142 -142
  195. package/lib/esm/StringUtils.js.map +1 -1
  196. package/lib/esm/Time.d.ts +122 -122
  197. package/lib/esm/Time.js +146 -146
  198. package/lib/esm/Time.js.map +1 -1
  199. package/lib/esm/Tracing.d.ts +40 -40
  200. package/lib/esm/Tracing.js +126 -126
  201. package/lib/esm/Tracing.js.map +1 -1
  202. package/lib/esm/TupleKeyedMap.d.ts +36 -36
  203. package/lib/esm/TupleKeyedMap.js +98 -98
  204. package/lib/esm/TupleKeyedMap.js.map +1 -1
  205. package/lib/esm/TypedArrayBuilder.d.ts +97 -97
  206. package/lib/esm/TypedArrayBuilder.js +127 -127
  207. package/lib/esm/TypedArrayBuilder.js.map +1 -1
  208. package/lib/esm/UnexpectedErrors.d.ts +43 -43
  209. package/lib/esm/UnexpectedErrors.js +64 -64
  210. package/lib/esm/UnexpectedErrors.js.map +1 -1
  211. package/lib/esm/UtilityTypes.d.ts +100 -100
  212. package/lib/esm/UtilityTypes.js +34 -34
  213. package/lib/esm/UtilityTypes.js.map +1 -1
  214. package/lib/esm/YieldManager.d.ts +18 -18
  215. package/lib/esm/YieldManager.js +30 -30
  216. package/lib/esm/YieldManager.js.map +1 -1
  217. package/lib/esm/core-bentley.d.ts +75 -75
  218. package/lib/esm/core-bentley.js +79 -79
  219. package/lib/esm/core-bentley.js.map +1 -1
  220. package/lib/esm/partitionArray.d.ts +21 -21
  221. package/lib/esm/partitionArray.js +39 -39
  222. package/lib/esm/partitionArray.js.map +1 -1
  223. package/package.json +3 -3
@@ -1,40 +1,40 @@
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 Utils
7
- */
8
- /**
9
- * Utility to ensure a block of async code executes atomically.
10
- * Even if JavaScript precludes the possibility of race conditions between threads, there is potential for
11
- * race conditions with async code. This utility is needed in cases where a block of async code needs to run
12
- * to completion before another block is started.
13
- * This utility was based on this article: https://spin.atomicobject.com/2018/09/10/javascript-concurrency/
14
- * @alpha
15
- */
16
- export class AsyncMutex {
17
- constructor() {
18
- this._mutex = Promise.resolve();
19
- }
20
- /**
21
- * Await the return value to setup a lock. The return value
22
- * is also the unlock function that can be called to unlock
23
- * the mutex.
24
- */
25
- async lock() {
26
- /**
27
- * Note: The promise returned by this method will resolve (with the unlock function, which is actually the
28
- * mutex’s then’s resolve function) once any previous mutexes have finished and called their
29
- * respective unlock function that was yielded over their promise.
30
- */
31
- let begin = (_unlock) => { };
32
- this._mutex = this._mutex.then(async () => {
33
- return new Promise(begin);
34
- });
35
- return new Promise((res) => {
36
- begin = res;
37
- });
38
- }
39
- }
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 Utils
7
+ */
8
+ /**
9
+ * Utility to ensure a block of async code executes atomically.
10
+ * Even if JavaScript precludes the possibility of race conditions between threads, there is potential for
11
+ * race conditions with async code. This utility is needed in cases where a block of async code needs to run
12
+ * to completion before another block is started.
13
+ * This utility was based on this article: https://spin.atomicobject.com/2018/09/10/javascript-concurrency/
14
+ * @alpha
15
+ */
16
+ export class AsyncMutex {
17
+ constructor() {
18
+ this._mutex = Promise.resolve();
19
+ }
20
+ /**
21
+ * Await the return value to setup a lock. The return value
22
+ * is also the unlock function that can be called to unlock
23
+ * the mutex.
24
+ */
25
+ async lock() {
26
+ /**
27
+ * Note: The promise returned by this method will resolve (with the unlock function, which is actually the
28
+ * mutex’s then’s resolve function) once any previous mutexes have finished and called their
29
+ * respective unlock function that was yielded over their promise.
30
+ */
31
+ let begin = (_unlock) => { };
32
+ this._mutex = this._mutex.then(async () => {
33
+ return new Promise(begin);
34
+ });
35
+ return new Promise((res) => {
36
+ begin = res;
37
+ });
38
+ }
39
+ }
40
40
  //# sourceMappingURL=AsyncMutex.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AsyncMutex.js","sourceRoot":"","sources":["../../src/AsyncMutex.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AASH;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IAAvB;QACU,WAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuBrC,CAAC;IArBC;;;;OAIG;IACI,KAAK,CAAC,IAAI;QACf;;;;WAIG;QACH,IAAI,KAAK,GAA6C,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAmB,EAAE;YACvD,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,KAAK,GAAG,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF","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 Utils\r\n */\r\n\r\n/**\r\n * Type of method to unlock the held mutex\r\n * @see [[AsyncMutex]]\r\n * @alpha\r\n */\r\nexport type AsyncMutexUnlockFnType = () => void;\r\n\r\n/**\r\n * Utility to ensure a block of async code executes atomically.\r\n * Even if JavaScript precludes the possibility of race conditions between threads, there is potential for\r\n * race conditions with async code. This utility is needed in cases where a block of async code needs to run\r\n * to completion before another block is started.\r\n * This utility was based on this article: https://spin.atomicobject.com/2018/09/10/javascript-concurrency/\r\n * @alpha\r\n */\r\nexport class AsyncMutex {\r\n private _mutex = Promise.resolve();\r\n\r\n /**\r\n * Await the return value to setup a lock. The return value\r\n * is also the unlock function that can be called to unlock\r\n * the mutex.\r\n */\r\n public async lock(): Promise<AsyncMutexUnlockFnType> {\r\n /**\r\n * Note: The promise returned by this method will resolve (with the unlock function, which is actually the\r\n * mutex’s then’s resolve function) once any previous mutexes have finished and called their\r\n * respective unlock function that was yielded over their promise.\r\n */\r\n let begin: (unlock: AsyncMutexUnlockFnType) => void = (_unlock) => { };\r\n\r\n this._mutex = this._mutex.then(async (): Promise<void> => {\r\n return new Promise(begin);\r\n });\r\n\r\n return new Promise((res) => {\r\n begin = res;\r\n });\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"AsyncMutex.js","sourceRoot":"","sources":["../../src/AsyncMutex.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AASH;;;;;;;GAOG;AACH,MAAM,OAAO,UAAU;IAAvB;QACU,WAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAuBrC,CAAC;IArBC;;;;OAIG;IACI,KAAK,CAAC,IAAI;QACf;;;;WAIG;QACH,IAAI,KAAK,GAA6C,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;QAEvE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAmB,EAAE;YACvD,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACzB,KAAK,GAAG,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;CACF","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 Utils\n */\n\n/**\n * Type of method to unlock the held mutex\n * @see [[AsyncMutex]]\n * @alpha\n */\nexport type AsyncMutexUnlockFnType = () => void;\n\n/**\n * Utility to ensure a block of async code executes atomically.\n * Even if JavaScript precludes the possibility of race conditions between threads, there is potential for\n * race conditions with async code. This utility is needed in cases where a block of async code needs to run\n * to completion before another block is started.\n * This utility was based on this article: https://spin.atomicobject.com/2018/09/10/javascript-concurrency/\n * @alpha\n */\nexport class AsyncMutex {\n private _mutex = Promise.resolve();\n\n /**\n * Await the return value to setup a lock. The return value\n * is also the unlock function that can be called to unlock\n * the mutex.\n */\n public async lock(): Promise<AsyncMutexUnlockFnType> {\n /**\n * Note: The promise returned by this method will resolve (with the unlock function, which is actually the\n * mutex’s then’s resolve function) once any previous mutexes have finished and called their\n * respective unlock function that was yielded over their promise.\n */\n let begin: (unlock: AsyncMutexUnlockFnType) => void = (_unlock) => { };\n\n this._mutex = this._mutex.then(async (): Promise<void> => {\n return new Promise(begin);\n });\n\n return new Promise((res) => {\n begin = res;\n });\n }\n}\n"]}
@@ -1,82 +1,82 @@
1
- /** @packageDocumentation
2
- * @module Events
3
- */
4
- /** A function invoked when a BeEvent is raised.
5
- * @public
6
- */
7
- export declare type Listener = (...arg: any[]) => void;
8
- /**
9
- * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
10
- * This class is usually instantiated inside of a container class and
11
- * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
12
- * @public
13
- */
14
- export declare class BeEvent<T extends Listener> {
15
- private _listeners;
16
- private _insideRaiseEvent;
17
- /** The number of listeners currently subscribed to the event. */
18
- get numberOfListeners(): number;
19
- /**
20
- * Registers a Listener to be executed whenever this event is raised.
21
- * @param listener The function to be executed when the event is raised.
22
- * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
23
- * @returns A function that will remove this event listener.
24
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
25
- */
26
- addListener(listener: T, scope?: any): () => void;
27
- /**
28
- * Registers a callback function to be executed *only once* when the event is raised.
29
- * @param listener The function to be executed once when the event is raised.
30
- * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
31
- * @returns A function that will remove this event listener.
32
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
33
- */
34
- addOnce(listener: T, scope?: any): () => void;
35
- /**
36
- * Un-register a previously registered listener.
37
- * @param listener The listener to be unregistered.
38
- * @param scope The scope that was originally passed to addListener.
39
- * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
40
- * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
41
- */
42
- removeListener(listener: T, scope?: any): boolean;
43
- /**
44
- * Raises the event by calling each registered listener with the supplied arguments.
45
- * @param args This method takes any number of parameters and passes them through to the listeners.
46
- * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
47
- */
48
- raiseEvent(...args: Parameters<T>): void;
49
- /** Determine whether this BeEvent has a specified listener registered.
50
- * @param listener The listener to check.
51
- * @param scope optional scope argument to match call to addListener
52
- */
53
- has(listener: T, scope?: any): boolean;
54
- /** Clear all Listeners from this BeEvent. */
55
- clear(): void;
56
- }
57
- /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
58
- * @public
59
- */
60
- export declare class BeUiEvent<TEventArgs> extends BeEvent<(args: TEventArgs) => void> {
61
- /** Raises event with single strongly typed argument. */
62
- emit(args: TEventArgs): void;
63
- }
64
- /**
65
- * A list of BeEvent objects, accessible by an event name.
66
- * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
67
- * @public
68
- */
69
- export declare class BeEventList<T extends Listener> {
70
- private _events;
71
- /**
72
- * Gets the event associated with the specified name, creating the event if it does not already exist.
73
- * @param name The name of the event.
74
- */
75
- get(name: string): BeEvent<T>;
76
- /**
77
- * Removes the event associated with a name.
78
- * @param name The name of the event.
79
- */
80
- remove(name: string): void;
81
- }
1
+ /** @packageDocumentation
2
+ * @module Events
3
+ */
4
+ /** A function invoked when a BeEvent is raised.
5
+ * @public
6
+ */
7
+ export declare type Listener = (...arg: any[]) => void;
8
+ /**
9
+ * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
10
+ * This class is usually instantiated inside of a container class and
11
+ * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
12
+ * @public
13
+ */
14
+ export declare class BeEvent<T extends Listener> {
15
+ private _listeners;
16
+ private _insideRaiseEvent;
17
+ /** The number of listeners currently subscribed to the event. */
18
+ get numberOfListeners(): number;
19
+ /**
20
+ * Registers a Listener to be executed whenever this event is raised.
21
+ * @param listener The function to be executed when the event is raised.
22
+ * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
23
+ * @returns A function that will remove this event listener.
24
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
25
+ */
26
+ addListener(listener: T, scope?: any): () => void;
27
+ /**
28
+ * Registers a callback function to be executed *only once* when the event is raised.
29
+ * @param listener The function to be executed once when the event is raised.
30
+ * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
31
+ * @returns A function that will remove this event listener.
32
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
33
+ */
34
+ addOnce(listener: T, scope?: any): () => void;
35
+ /**
36
+ * Un-register a previously registered listener.
37
+ * @param listener The listener to be unregistered.
38
+ * @param scope The scope that was originally passed to addListener.
39
+ * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
40
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
41
+ */
42
+ removeListener(listener: T, scope?: any): boolean;
43
+ /**
44
+ * Raises the event by calling each registered listener with the supplied arguments.
45
+ * @param args This method takes any number of parameters and passes them through to the listeners.
46
+ * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
47
+ */
48
+ raiseEvent(...args: Parameters<T>): void;
49
+ /** Determine whether this BeEvent has a specified listener registered.
50
+ * @param listener The listener to check.
51
+ * @param scope optional scope argument to match call to addListener
52
+ */
53
+ has(listener: T, scope?: any): boolean;
54
+ /** Clear all Listeners from this BeEvent. */
55
+ clear(): void;
56
+ }
57
+ /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
58
+ * @public
59
+ */
60
+ export declare class BeUiEvent<TEventArgs> extends BeEvent<(args: TEventArgs) => void> {
61
+ /** Raises event with single strongly typed argument. */
62
+ emit(args: TEventArgs): void;
63
+ }
64
+ /**
65
+ * A list of BeEvent objects, accessible by an event name.
66
+ * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
67
+ * @public
68
+ */
69
+ export declare class BeEventList<T extends Listener> {
70
+ private _events;
71
+ /**
72
+ * Gets the event associated with the specified name, creating the event if it does not already exist.
73
+ * @param name The name of the event.
74
+ */
75
+ get(name: string): BeEvent<T>;
76
+ /**
77
+ * Removes the event associated with a name.
78
+ * @param name The name of the event.
79
+ */
80
+ remove(name: string): void;
81
+ }
82
82
  //# sourceMappingURL=BeEvent.d.ts.map
@@ -1,151 +1,151 @@
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 Events
7
- */
8
- import { UnexpectedErrors } from "./UnexpectedErrors";
9
- /**
10
- * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
11
- * This class is usually instantiated inside of a container class and
12
- * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
13
- * @public
14
- */
15
- export class BeEvent {
16
- constructor() {
17
- this._listeners = [];
18
- this._insideRaiseEvent = false;
19
- }
20
- /** The number of listeners currently subscribed to the event. */
21
- get numberOfListeners() { return this._listeners.length; }
22
- /**
23
- * Registers a Listener to be executed whenever this event is raised.
24
- * @param listener The function to be executed when the event is raised.
25
- * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
26
- * @returns A function that will remove this event listener.
27
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
28
- */
29
- addListener(listener, scope) {
30
- this._listeners.push({ listener, scope, once: false });
31
- return () => this.removeListener(listener, scope);
32
- }
33
- /**
34
- * Registers a callback function to be executed *only once* when the event is raised.
35
- * @param listener The function to be executed once when the event is raised.
36
- * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
37
- * @returns A function that will remove this event listener.
38
- * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
39
- */
40
- addOnce(listener, scope) {
41
- this._listeners.push({ listener, scope, once: true });
42
- return () => this.removeListener(listener, scope);
43
- }
44
- /**
45
- * Un-register a previously registered listener.
46
- * @param listener The listener to be unregistered.
47
- * @param scope The scope that was originally passed to addListener.
48
- * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
49
- * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
50
- */
51
- removeListener(listener, scope) {
52
- const listeners = this._listeners;
53
- for (let i = 0; i < listeners.length; ++i) {
54
- const context = listeners[i];
55
- if (context.listener === listener && context.scope === scope) {
56
- if (this._insideRaiseEvent) {
57
- context.listener = undefined;
58
- }
59
- else {
60
- listeners.splice(i, 1);
61
- }
62
- return true;
63
- }
64
- }
65
- return false;
66
- }
67
- /**
68
- * Raises the event by calling each registered listener with the supplied arguments.
69
- * @param args This method takes any number of parameters and passes them through to the listeners.
70
- * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
71
- */
72
- raiseEvent(...args) {
73
- this._insideRaiseEvent = true;
74
- const listeners = this._listeners;
75
- const length = listeners.length;
76
- let dropped = false;
77
- for (let i = 0; i < length; ++i) {
78
- const context = listeners[i];
79
- if (!context.listener) {
80
- dropped = true;
81
- }
82
- else {
83
- try {
84
- context.listener.apply(context.scope, args);
85
- }
86
- catch (e) {
87
- UnexpectedErrors.handle(e);
88
- }
89
- if (context.once) {
90
- context.listener = undefined;
91
- dropped = true;
92
- }
93
- }
94
- }
95
- // if we had dropped listeners, remove them now
96
- if (dropped)
97
- this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);
98
- this._insideRaiseEvent = false;
99
- }
100
- /** Determine whether this BeEvent has a specified listener registered.
101
- * @param listener The listener to check.
102
- * @param scope optional scope argument to match call to addListener
103
- */
104
- has(listener, scope) {
105
- for (const ctx of this._listeners) {
106
- if (ctx.listener === listener && ctx.scope === scope) {
107
- return true;
108
- }
109
- }
110
- return false;
111
- }
112
- /** Clear all Listeners from this BeEvent. */
113
- clear() { this._listeners.length = 0; }
114
- }
115
- /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
116
- * @public
117
- */
118
- export class BeUiEvent extends BeEvent {
119
- /** Raises event with single strongly typed argument. */
120
- emit(args) { this.raiseEvent(args); }
121
- }
122
- /**
123
- * A list of BeEvent objects, accessible by an event name.
124
- * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
125
- * @public
126
- */
127
- export class BeEventList {
128
- constructor() {
129
- this._events = {};
130
- }
131
- /**
132
- * Gets the event associated with the specified name, creating the event if it does not already exist.
133
- * @param name The name of the event.
134
- */
135
- get(name) {
136
- let event = this._events[name];
137
- if (event)
138
- return event;
139
- event = new BeEvent();
140
- this._events[name] = event;
141
- return event;
142
- }
143
- /**
144
- * Removes the event associated with a name.
145
- * @param name The name of the event.
146
- */
147
- remove(name) {
148
- this._events[name] = undefined;
149
- }
150
- }
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 Events
7
+ */
8
+ import { UnexpectedErrors } from "./UnexpectedErrors";
9
+ /**
10
+ * Manages a set of *listeners* for a particular event and notifies them when the event is raised.
11
+ * This class is usually instantiated inside of a container class and
12
+ * exposed as a property for others to *subscribe* via [[BeEvent.addListener]].
13
+ * @public
14
+ */
15
+ export class BeEvent {
16
+ constructor() {
17
+ this._listeners = [];
18
+ this._insideRaiseEvent = false;
19
+ }
20
+ /** The number of listeners currently subscribed to the event. */
21
+ get numberOfListeners() { return this._listeners.length; }
22
+ /**
23
+ * Registers a Listener to be executed whenever this event is raised.
24
+ * @param listener The function to be executed when the event is raised.
25
+ * @param scope An optional object scope to serve as the 'this' pointer when listener is invoked.
26
+ * @returns A function that will remove this event listener.
27
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
28
+ */
29
+ addListener(listener, scope) {
30
+ this._listeners.push({ listener, scope, once: false });
31
+ return () => this.removeListener(listener, scope);
32
+ }
33
+ /**
34
+ * Registers a callback function to be executed *only once* when the event is raised.
35
+ * @param listener The function to be executed once when the event is raised.
36
+ * @param scope An optional object scope to serve as the `this` pointer in which the listener function will execute.
37
+ * @returns A function that will remove this event listener.
38
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.removeListener]]
39
+ */
40
+ addOnce(listener, scope) {
41
+ this._listeners.push({ listener, scope, once: true });
42
+ return () => this.removeListener(listener, scope);
43
+ }
44
+ /**
45
+ * Un-register a previously registered listener.
46
+ * @param listener The listener to be unregistered.
47
+ * @param scope The scope that was originally passed to addListener.
48
+ * @returns 'true' if the listener was removed; 'false' if the listener and scope are not registered with the event.
49
+ * @see [[BeEvent.raiseEvent]], [[BeEvent.addListener]]
50
+ */
51
+ removeListener(listener, scope) {
52
+ const listeners = this._listeners;
53
+ for (let i = 0; i < listeners.length; ++i) {
54
+ const context = listeners[i];
55
+ if (context.listener === listener && context.scope === scope) {
56
+ if (this._insideRaiseEvent) {
57
+ context.listener = undefined;
58
+ }
59
+ else {
60
+ listeners.splice(i, 1);
61
+ }
62
+ return true;
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+ /**
68
+ * Raises the event by calling each registered listener with the supplied arguments.
69
+ * @param args This method takes any number of parameters and passes them through to the listeners.
70
+ * @see [[BeEvent.removeListener]], [[BeEvent.addListener]]
71
+ */
72
+ raiseEvent(...args) {
73
+ this._insideRaiseEvent = true;
74
+ const listeners = this._listeners;
75
+ const length = listeners.length;
76
+ let dropped = false;
77
+ for (let i = 0; i < length; ++i) {
78
+ const context = listeners[i];
79
+ if (!context.listener) {
80
+ dropped = true;
81
+ }
82
+ else {
83
+ try {
84
+ context.listener.apply(context.scope, args);
85
+ }
86
+ catch (e) {
87
+ UnexpectedErrors.handle(e);
88
+ }
89
+ if (context.once) {
90
+ context.listener = undefined;
91
+ dropped = true;
92
+ }
93
+ }
94
+ }
95
+ // if we had dropped listeners, remove them now
96
+ if (dropped)
97
+ this._listeners = this._listeners.filter((ctx) => ctx.listener !== undefined);
98
+ this._insideRaiseEvent = false;
99
+ }
100
+ /** Determine whether this BeEvent has a specified listener registered.
101
+ * @param listener The listener to check.
102
+ * @param scope optional scope argument to match call to addListener
103
+ */
104
+ has(listener, scope) {
105
+ for (const ctx of this._listeners) {
106
+ if (ctx.listener === listener && ctx.scope === scope) {
107
+ return true;
108
+ }
109
+ }
110
+ return false;
111
+ }
112
+ /** Clear all Listeners from this BeEvent. */
113
+ clear() { this._listeners.length = 0; }
114
+ }
115
+ /** Specialization of BeEvent for events that take a single strongly typed argument, primarily used for UI events.
116
+ * @public
117
+ */
118
+ export class BeUiEvent extends BeEvent {
119
+ /** Raises event with single strongly typed argument. */
120
+ emit(args) { this.raiseEvent(args); }
121
+ }
122
+ /**
123
+ * A list of BeEvent objects, accessible by an event name.
124
+ * This class may be used instead of explicitly declaring each BeEvent as a member of a containing class.
125
+ * @public
126
+ */
127
+ export class BeEventList {
128
+ constructor() {
129
+ this._events = {};
130
+ }
131
+ /**
132
+ * Gets the event associated with the specified name, creating the event if it does not already exist.
133
+ * @param name The name of the event.
134
+ */
135
+ get(name) {
136
+ let event = this._events[name];
137
+ if (event)
138
+ return event;
139
+ event = new BeEvent();
140
+ this._events[name] = event;
141
+ return event;
142
+ }
143
+ /**
144
+ * Removes the event associated with a name.
145
+ * @param name The name of the event.
146
+ */
147
+ remove(name) {
148
+ this._events[name] = undefined;
149
+ }
150
+ }
151
151
  //# 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"]}