@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,41 +1,41 @@
1
- import type { SpanAttributes, SpanContext, SpanOptions, Tracer } from "@opentelemetry/api";
2
- /**
3
- * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)
4
- * @alpha
5
- */
6
- export declare enum SpanKind {
7
- INTERNAL = 0,
8
- SERVER = 1,
9
- CLIENT = 2,
10
- PRODUCER = 3,
11
- CONSUMER = 4
12
- }
13
- /**
14
- * Enables OpenTelemetry tracing in addition to traditional logging.
15
- * @alpha
16
- */
17
- export declare class Tracing {
18
- private static _tracer?;
19
- private static _openTelemetry?;
20
- /**
21
- * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.
22
- * If OpenTelemetry tracing is _not_ enabled, runs the provided function.
23
- * @param name name of the new span
24
- * @param fn function to run inside the new span
25
- * @param options span options
26
- * @param parentContext optional context used to retrieve parent span id
27
- */
28
- static withSpan<T>(name: string, fn: () => Promise<T>, options?: SpanOptions, parentContext?: SpanContext): Promise<T>;
29
- /**
30
- * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.
31
- * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.
32
- * @note Node.js OpenTelemetry SDK should be initialized by the user.
33
- */
34
- static enableOpenTelemetry(tracer: Tracer, api: typeof Tracing._openTelemetry): void;
35
- private static withOpenTelemetry;
36
- /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.
37
- * @param attributes The attributes to set
38
- */
39
- static setAttributes(attributes: SpanAttributes): void;
40
- }
1
+ import type { SpanAttributes, SpanContext, SpanOptions, Tracer } from "@opentelemetry/api";
2
+ /**
3
+ * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)
4
+ * @alpha
5
+ */
6
+ export declare enum SpanKind {
7
+ INTERNAL = 0,
8
+ SERVER = 1,
9
+ CLIENT = 2,
10
+ PRODUCER = 3,
11
+ CONSUMER = 4
12
+ }
13
+ /**
14
+ * Enables OpenTelemetry tracing in addition to traditional logging.
15
+ * @alpha
16
+ */
17
+ export declare class Tracing {
18
+ private static _tracer?;
19
+ private static _openTelemetry?;
20
+ /**
21
+ * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.
22
+ * If OpenTelemetry tracing is _not_ enabled, runs the provided function.
23
+ * @param name name of the new span
24
+ * @param fn function to run inside the new span
25
+ * @param options span options
26
+ * @param parentContext optional context used to retrieve parent span id
27
+ */
28
+ static withSpan<T>(name: string, fn: () => Promise<T>, options?: SpanOptions, parentContext?: SpanContext): Promise<T>;
29
+ /**
30
+ * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.
31
+ * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.
32
+ * @note Node.js OpenTelemetry SDK should be initialized by the user.
33
+ */
34
+ static enableOpenTelemetry(tracer: Tracer, api: typeof Tracing._openTelemetry): void;
35
+ private static withOpenTelemetry;
36
+ /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.
37
+ * @param attributes The attributes to set
38
+ */
39
+ static setAttributes(attributes: SpanAttributes): void;
40
+ }
41
41
  //# sourceMappingURL=Tracing.d.ts.map
@@ -1,131 +1,131 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Tracing = exports.SpanKind = void 0;
4
- const Logger_1 = require("./Logger");
5
- // re-export so that consumers can construct full SpanOptions object without external dependencies
6
- /**
7
- * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)
8
- * @alpha
9
- */
10
- var SpanKind;
11
- (function (SpanKind) {
12
- SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL";
13
- SpanKind[SpanKind["SERVER"] = 1] = "SERVER";
14
- SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT";
15
- SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER";
16
- SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER";
17
- })(SpanKind = exports.SpanKind || (exports.SpanKind = {}));
18
- function isValidPrimitive(val) {
19
- return typeof val === "string" || typeof val === "number" || typeof val === "boolean";
20
- }
21
- // Only _homogenous_ arrays of strings, numbers, or booleans are supported as OpenTelemetry Attribute values.
22
- // Per the spec (https://opentelemetry.io/docs/reference/specification/common/common/#attribute), empty arrays and null values are supported too.
23
- function isValidPrimitiveArray(val) {
24
- if (!Array.isArray(val))
25
- return false;
26
- let itemType;
27
- for (const x of val) {
28
- if (x === undefined || x === null)
29
- continue;
30
- if (!itemType) {
31
- itemType = typeof x;
32
- if (!isValidPrimitive(x))
33
- return false;
34
- }
35
- if (typeof x !== itemType)
36
- return false;
37
- }
38
- return true;
39
- }
40
- function isPlainObject(obj) {
41
- return typeof obj === "object" && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;
42
- }
43
- function* getFlatEntries(obj, path = "") {
44
- if (isValidPrimitiveArray(obj)) {
45
- yield [path, obj];
46
- return;
47
- }
48
- // Prefer JSON serialization over flattening for any non-POJO types.
49
- // There's just too many ways trying to flatten those can go wrong (Dates, Buffers, TypedArrays, etc.)
50
- if (!isPlainObject(obj) && !Array.isArray(obj)) {
51
- yield [path, isValidPrimitive(obj) ? obj : JSON.stringify(obj)];
52
- return;
53
- }
54
- // Always serialize empty objects/arrays as empty array values
55
- const entries = Object.entries(obj);
56
- if (entries.length === 0)
57
- yield [path, []];
58
- for (const [key, val] of entries)
59
- yield* getFlatEntries(val, (path === "") ? key : `${path}.${key}`);
60
- }
61
- function flattenObject(obj) {
62
- return Object.fromEntries(getFlatEntries(obj));
63
- }
64
- /**
65
- * Enables OpenTelemetry tracing in addition to traditional logging.
66
- * @alpha
67
- */
68
- class Tracing {
69
- /**
70
- * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.
71
- * If OpenTelemetry tracing is _not_ enabled, runs the provided function.
72
- * @param name name of the new span
73
- * @param fn function to run inside the new span
74
- * @param options span options
75
- * @param parentContext optional context used to retrieve parent span id
76
- */
77
- static async withSpan(name, fn, options, parentContext) {
78
- if (Tracing._tracer === undefined || Tracing._openTelemetry === undefined)
79
- return fn();
80
- // this case is for context propagation - parentContext is typically constructed from HTTP headers
81
- const parent = parentContext === undefined
82
- ? Tracing._openTelemetry.context.active()
83
- : Tracing._openTelemetry.trace.setSpanContext(Tracing._openTelemetry.context.active(), parentContext);
84
- return Tracing._openTelemetry.context.with(Tracing._openTelemetry.trace.setSpan(parent, Tracing._tracer.startSpan(name, options, Tracing._openTelemetry.context.active())), async () => {
85
- var _a, _b, _c, _d;
86
- try {
87
- return await fn();
88
- }
89
- catch (err) {
90
- if (err instanceof Error) // ignore non-Error throws, such as RpcControlResponse
91
- (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.setAttribute("error", true);
92
- throw err;
93
- }
94
- finally {
95
- (_d = (_c = Tracing._openTelemetry) === null || _c === void 0 ? void 0 : _c.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _d === void 0 ? void 0 : _d.end();
96
- }
97
- });
98
- }
99
- /**
100
- * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.
101
- * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.
102
- * @note Node.js OpenTelemetry SDK should be initialized by the user.
103
- */
104
- static enableOpenTelemetry(tracer, api) {
105
- Tracing._tracer = tracer;
106
- Tracing._openTelemetry = api;
107
- Logger_1.Logger.logTrace = Tracing.withOpenTelemetry(Logger_1.Logger.logTrace);
108
- Logger_1.Logger.logInfo = Tracing.withOpenTelemetry(Logger_1.Logger.logInfo);
109
- Logger_1.Logger.logWarning = Tracing.withOpenTelemetry(Logger_1.Logger.logWarning);
110
- Logger_1.Logger.logError = Tracing.withOpenTelemetry(Logger_1.Logger.logError);
111
- }
112
- static withOpenTelemetry(base, isError = false) {
113
- return (category, message, metaData) => {
114
- var _a, _b;
115
- try {
116
- (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.addEvent(message, { ...flattenObject(Logger_1.Logger.getMetaData(metaData)), error: isError });
117
- }
118
- catch (_e) { } // avoid throwing random errors (with stack trace mangled by async hooks) when openTelemetry collector doesn't work
119
- base(category, message, metaData);
120
- };
121
- }
122
- /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.
123
- * @param attributes The attributes to set
124
- */
125
- static setAttributes(attributes) {
126
- var _a, _b;
127
- (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.setAttributes(attributes);
128
- }
129
- }
130
- exports.Tracing = Tracing;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Tracing = exports.SpanKind = void 0;
4
+ const Logger_1 = require("./Logger");
5
+ // re-export so that consumers can construct full SpanOptions object without external dependencies
6
+ /**
7
+ * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)
8
+ * @alpha
9
+ */
10
+ var SpanKind;
11
+ (function (SpanKind) {
12
+ SpanKind[SpanKind["INTERNAL"] = 0] = "INTERNAL";
13
+ SpanKind[SpanKind["SERVER"] = 1] = "SERVER";
14
+ SpanKind[SpanKind["CLIENT"] = 2] = "CLIENT";
15
+ SpanKind[SpanKind["PRODUCER"] = 3] = "PRODUCER";
16
+ SpanKind[SpanKind["CONSUMER"] = 4] = "CONSUMER";
17
+ })(SpanKind = exports.SpanKind || (exports.SpanKind = {}));
18
+ function isValidPrimitive(val) {
19
+ return typeof val === "string" || typeof val === "number" || typeof val === "boolean";
20
+ }
21
+ // Only _homogenous_ arrays of strings, numbers, or booleans are supported as OpenTelemetry Attribute values.
22
+ // Per the spec (https://opentelemetry.io/docs/reference/specification/common/common/#attribute), empty arrays and null values are supported too.
23
+ function isValidPrimitiveArray(val) {
24
+ if (!Array.isArray(val))
25
+ return false;
26
+ let itemType;
27
+ for (const x of val) {
28
+ if (x === undefined || x === null)
29
+ continue;
30
+ if (!itemType) {
31
+ itemType = typeof x;
32
+ if (!isValidPrimitive(x))
33
+ return false;
34
+ }
35
+ if (typeof x !== itemType)
36
+ return false;
37
+ }
38
+ return true;
39
+ }
40
+ function isPlainObject(obj) {
41
+ return typeof obj === "object" && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;
42
+ }
43
+ function* getFlatEntries(obj, path = "") {
44
+ if (isValidPrimitiveArray(obj)) {
45
+ yield [path, obj];
46
+ return;
47
+ }
48
+ // Prefer JSON serialization over flattening for any non-POJO types.
49
+ // There's just too many ways trying to flatten those can go wrong (Dates, Buffers, TypedArrays, etc.)
50
+ if (!isPlainObject(obj) && !Array.isArray(obj)) {
51
+ yield [path, isValidPrimitive(obj) ? obj : JSON.stringify(obj)];
52
+ return;
53
+ }
54
+ // Always serialize empty objects/arrays as empty array values
55
+ const entries = Object.entries(obj);
56
+ if (entries.length === 0)
57
+ yield [path, []];
58
+ for (const [key, val] of entries)
59
+ yield* getFlatEntries(val, (path === "") ? key : `${path}.${key}`);
60
+ }
61
+ function flattenObject(obj) {
62
+ return Object.fromEntries(getFlatEntries(obj));
63
+ }
64
+ /**
65
+ * Enables OpenTelemetry tracing in addition to traditional logging.
66
+ * @alpha
67
+ */
68
+ class Tracing {
69
+ /**
70
+ * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.
71
+ * If OpenTelemetry tracing is _not_ enabled, runs the provided function.
72
+ * @param name name of the new span
73
+ * @param fn function to run inside the new span
74
+ * @param options span options
75
+ * @param parentContext optional context used to retrieve parent span id
76
+ */
77
+ static async withSpan(name, fn, options, parentContext) {
78
+ if (Tracing._tracer === undefined || Tracing._openTelemetry === undefined)
79
+ return fn();
80
+ // this case is for context propagation - parentContext is typically constructed from HTTP headers
81
+ const parent = parentContext === undefined
82
+ ? Tracing._openTelemetry.context.active()
83
+ : Tracing._openTelemetry.trace.setSpanContext(Tracing._openTelemetry.context.active(), parentContext);
84
+ return Tracing._openTelemetry.context.with(Tracing._openTelemetry.trace.setSpan(parent, Tracing._tracer.startSpan(name, options, Tracing._openTelemetry.context.active())), async () => {
85
+ var _a, _b, _c, _d;
86
+ try {
87
+ return await fn();
88
+ }
89
+ catch (err) {
90
+ if (err instanceof Error) // ignore non-Error throws, such as RpcControlResponse
91
+ (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.setAttribute("error", true);
92
+ throw err;
93
+ }
94
+ finally {
95
+ (_d = (_c = Tracing._openTelemetry) === null || _c === void 0 ? void 0 : _c.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _d === void 0 ? void 0 : _d.end();
96
+ }
97
+ });
98
+ }
99
+ /**
100
+ * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.
101
+ * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.
102
+ * @note Node.js OpenTelemetry SDK should be initialized by the user.
103
+ */
104
+ static enableOpenTelemetry(tracer, api) {
105
+ Tracing._tracer = tracer;
106
+ Tracing._openTelemetry = api;
107
+ Logger_1.Logger.logTrace = Tracing.withOpenTelemetry(Logger_1.Logger.logTrace);
108
+ Logger_1.Logger.logInfo = Tracing.withOpenTelemetry(Logger_1.Logger.logInfo);
109
+ Logger_1.Logger.logWarning = Tracing.withOpenTelemetry(Logger_1.Logger.logWarning);
110
+ Logger_1.Logger.logError = Tracing.withOpenTelemetry(Logger_1.Logger.logError);
111
+ }
112
+ static withOpenTelemetry(base, isError = false) {
113
+ return (category, message, metaData) => {
114
+ var _a, _b;
115
+ try {
116
+ (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.addEvent(message, { ...flattenObject(Logger_1.Logger.getMetaData(metaData)), error: isError });
117
+ }
118
+ catch (_e) { } // avoid throwing random errors (with stack trace mangled by async hooks) when openTelemetry collector doesn't work
119
+ base(category, message, metaData);
120
+ };
121
+ }
122
+ /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.
123
+ * @param attributes The attributes to set
124
+ */
125
+ static setAttributes(attributes) {
126
+ var _a, _b;
127
+ (_b = (_a = Tracing._openTelemetry) === null || _a === void 0 ? void 0 : _a.trace.getSpan(Tracing._openTelemetry.context.active())) === null || _b === void 0 ? void 0 : _b.setAttributes(attributes);
128
+ }
129
+ }
130
+ exports.Tracing = Tracing;
131
131
  //# sourceMappingURL=Tracing.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tracing.js","sourceRoot":"","sources":["../../src/Tracing.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\nimport type { ContextAPI, SpanAttributes, SpanAttributeValue, SpanContext, SpanOptions, TraceAPI, Tracer } from \"@opentelemetry/api\";\r\nimport { LogFunction, Logger } from \"./Logger\";\r\n\r\n// re-export so that consumers can construct full SpanOptions object without external dependencies\r\n/**\r\n * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)\r\n * @alpha\r\n */\r\nexport enum SpanKind {\r\n INTERNAL = 0,\r\n SERVER = 1,\r\n CLIENT = 2,\r\n PRODUCER = 3,\r\n CONSUMER = 4\r\n}\r\n\r\nfunction isValidPrimitive(val: unknown): val is SpanAttributeValue {\r\n return typeof val === \"string\" || typeof val === \"number\" || typeof val === \"boolean\";\r\n}\r\n\r\n// Only _homogenous_ arrays of strings, numbers, or booleans are supported as OpenTelemetry Attribute values.\r\n// Per the spec (https://opentelemetry.io/docs/reference/specification/common/common/#attribute), empty arrays and null values are supported too.\r\nfunction isValidPrimitiveArray(val: unknown): val is SpanAttributeValue {\r\n if (!Array.isArray(val))\r\n return false;\r\n\r\n let itemType;\r\n for (const x of val) {\r\n if (x === undefined || x === null)\r\n continue;\r\n\r\n if (!itemType) {\r\n itemType = typeof x;\r\n if (!isValidPrimitive(x))\r\n return false;\r\n }\r\n\r\n if (typeof x !== itemType)\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction isPlainObject(obj: unknown): obj is object {\r\n return typeof obj === \"object\" && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\r\n}\r\n\r\nfunction* getFlatEntries(obj: unknown, path = \"\"): Iterable<[string, SpanAttributeValue]> {\r\n if (isValidPrimitiveArray(obj)) {\r\n yield [path, obj];\r\n return;\r\n }\r\n\r\n // Prefer JSON serialization over flattening for any non-POJO types.\r\n // There's just too many ways trying to flatten those can go wrong (Dates, Buffers, TypedArrays, etc.)\r\n if (!isPlainObject(obj) && !Array.isArray(obj)) {\r\n yield [path, isValidPrimitive(obj) ? obj : JSON.stringify(obj)];\r\n return;\r\n }\r\n\r\n // Always serialize empty objects/arrays as empty array values\r\n const entries = Object.entries(obj);\r\n if (entries.length === 0)\r\n yield [path, []];\r\n\r\n for (const [key, val] of entries)\r\n yield* getFlatEntries(val, (path === \"\") ? key : `${path}.${key}`);\r\n}\r\n\r\nfunction flattenObject(obj: object): SpanAttributes {\r\n return Object.fromEntries(getFlatEntries(obj));\r\n}\r\n\r\n/**\r\n * Enables OpenTelemetry tracing in addition to traditional logging.\r\n * @alpha\r\n */\r\nexport class Tracing {\r\n private static _tracer?: Tracer;\r\n private static _openTelemetry?: { trace: Pick<TraceAPI, \"setSpan\" | \"setSpanContext\" | \"getSpan\">, context: Pick<ContextAPI, \"active\" | \"with\"> };\r\n\r\n /**\r\n * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.\r\n * If OpenTelemetry tracing is _not_ enabled, runs the provided function.\r\n * @param name name of the new span\r\n * @param fn function to run inside the new span\r\n * @param options span options\r\n * @param parentContext optional context used to retrieve parent span id\r\n */\r\n public static async withSpan<T>(name: string, fn: () => Promise<T>, options?: SpanOptions, parentContext?: SpanContext): Promise<T> {\r\n if (Tracing._tracer === undefined || Tracing._openTelemetry === undefined)\r\n return fn();\r\n\r\n // this case is for context propagation - parentContext is typically constructed from HTTP headers\r\n const parent = parentContext === undefined\r\n ? Tracing._openTelemetry.context.active()\r\n : Tracing._openTelemetry.trace.setSpanContext(Tracing._openTelemetry.context.active(), parentContext);\r\n\r\n return Tracing._openTelemetry.context.with(\r\n Tracing._openTelemetry.trace.setSpan(\r\n parent,\r\n Tracing._tracer.startSpan(name, options, Tracing._openTelemetry.context.active())\r\n ),\r\n async () => {\r\n try {\r\n return await fn();\r\n } catch (err) {\r\n if (err instanceof Error) // ignore non-Error throws, such as RpcControlResponse\r\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.setAttribute(\"error\", true);\r\n throw err;\r\n } finally {\r\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.end();\r\n }\r\n },\r\n );\r\n }\r\n\r\n /**\r\n * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.\r\n * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.\r\n * @note Node.js OpenTelemetry SDK should be initialized by the user.\r\n */\r\n public static enableOpenTelemetry(tracer: Tracer, api: typeof Tracing._openTelemetry) {\r\n Tracing._tracer = tracer;\r\n Tracing._openTelemetry = api;\r\n Logger.logTrace = Tracing.withOpenTelemetry(Logger.logTrace);\r\n Logger.logInfo = Tracing.withOpenTelemetry(Logger.logInfo);\r\n Logger.logWarning = Tracing.withOpenTelemetry(Logger.logWarning);\r\n Logger.logError = Tracing.withOpenTelemetry(Logger.logError);\r\n }\r\n\r\n private static withOpenTelemetry(base: LogFunction, isError: boolean = false): LogFunction {\r\n return (category, message, metaData) => {\r\n try {\r\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.addEvent(message, { ...flattenObject(Logger.getMetaData(metaData)), error: isError });\r\n } catch (_e) { } // avoid throwing random errors (with stack trace mangled by async hooks) when openTelemetry collector doesn't work\r\n base(category, message, metaData);\r\n };\r\n }\r\n\r\n /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.\r\n * @param attributes The attributes to set\r\n */\r\n public static setAttributes(attributes: SpanAttributes) {\r\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.setAttributes(attributes);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Tracing.js","sourceRoot":"","sources":["../../src/Tracing.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*--------------------------------------------------------------------------------------------*/\nimport type { ContextAPI, SpanAttributes, SpanAttributeValue, SpanContext, SpanOptions, TraceAPI, Tracer } from \"@opentelemetry/api\";\nimport { LogFunction, Logger } from \"./Logger\";\n\n// re-export so that consumers can construct full SpanOptions object without external dependencies\n/**\n * Mirrors the SpanKind enum from [@opentelemetry/api](https://open-telemetry.github.io/opentelemetry-js-api/enums/spankind)\n * @alpha\n */\nexport enum SpanKind {\n INTERNAL = 0,\n SERVER = 1,\n CLIENT = 2,\n PRODUCER = 3,\n CONSUMER = 4\n}\n\nfunction isValidPrimitive(val: unknown): val is SpanAttributeValue {\n return typeof val === \"string\" || typeof val === \"number\" || typeof val === \"boolean\";\n}\n\n// Only _homogenous_ arrays of strings, numbers, or booleans are supported as OpenTelemetry Attribute values.\n// Per the spec (https://opentelemetry.io/docs/reference/specification/common/common/#attribute), empty arrays and null values are supported too.\nfunction isValidPrimitiveArray(val: unknown): val is SpanAttributeValue {\n if (!Array.isArray(val))\n return false;\n\n let itemType;\n for (const x of val) {\n if (x === undefined || x === null)\n continue;\n\n if (!itemType) {\n itemType = typeof x;\n if (!isValidPrimitive(x))\n return false;\n }\n\n if (typeof x !== itemType)\n return false;\n }\n return true;\n}\n\nfunction isPlainObject(obj: unknown): obj is object {\n return typeof obj === \"object\" && obj !== null && Object.getPrototypeOf(obj) === Object.prototype;\n}\n\nfunction* getFlatEntries(obj: unknown, path = \"\"): Iterable<[string, SpanAttributeValue]> {\n if (isValidPrimitiveArray(obj)) {\n yield [path, obj];\n return;\n }\n\n // Prefer JSON serialization over flattening for any non-POJO types.\n // There's just too many ways trying to flatten those can go wrong (Dates, Buffers, TypedArrays, etc.)\n if (!isPlainObject(obj) && !Array.isArray(obj)) {\n yield [path, isValidPrimitive(obj) ? obj : JSON.stringify(obj)];\n return;\n }\n\n // Always serialize empty objects/arrays as empty array values\n const entries = Object.entries(obj);\n if (entries.length === 0)\n yield [path, []];\n\n for (const [key, val] of entries)\n yield* getFlatEntries(val, (path === \"\") ? key : `${path}.${key}`);\n}\n\nfunction flattenObject(obj: object): SpanAttributes {\n return Object.fromEntries(getFlatEntries(obj));\n}\n\n/**\n * Enables OpenTelemetry tracing in addition to traditional logging.\n * @alpha\n */\nexport class Tracing {\n private static _tracer?: Tracer;\n private static _openTelemetry?: { trace: Pick<TraceAPI, \"setSpan\" | \"setSpanContext\" | \"getSpan\">, context: Pick<ContextAPI, \"active\" | \"with\"> };\n\n /**\n * If OpenTelemetry tracing is enabled, creates a new span and runs the provided function in it.\n * If OpenTelemetry tracing is _not_ enabled, runs the provided function.\n * @param name name of the new span\n * @param fn function to run inside the new span\n * @param options span options\n * @param parentContext optional context used to retrieve parent span id\n */\n public static async withSpan<T>(name: string, fn: () => Promise<T>, options?: SpanOptions, parentContext?: SpanContext): Promise<T> {\n if (Tracing._tracer === undefined || Tracing._openTelemetry === undefined)\n return fn();\n\n // this case is for context propagation - parentContext is typically constructed from HTTP headers\n const parent = parentContext === undefined\n ? Tracing._openTelemetry.context.active()\n : Tracing._openTelemetry.trace.setSpanContext(Tracing._openTelemetry.context.active(), parentContext);\n\n return Tracing._openTelemetry.context.with(\n Tracing._openTelemetry.trace.setSpan(\n parent,\n Tracing._tracer.startSpan(name, options, Tracing._openTelemetry.context.active())\n ),\n async () => {\n try {\n return await fn();\n } catch (err) {\n if (err instanceof Error) // ignore non-Error throws, such as RpcControlResponse\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.setAttribute(\"error\", true);\n throw err;\n } finally {\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.end();\n }\n },\n );\n }\n\n /**\n * Enable logging to OpenTelemetry. [[Tracing.withSpan]] will be enabled, all log entries will be attached to active span as span events.\n * [[IModelHost.startup]] will call this automatically if it succeeds in requiring `@opentelemetry/api`.\n * @note Node.js OpenTelemetry SDK should be initialized by the user.\n */\n public static enableOpenTelemetry(tracer: Tracer, api: typeof Tracing._openTelemetry) {\n Tracing._tracer = tracer;\n Tracing._openTelemetry = api;\n Logger.logTrace = Tracing.withOpenTelemetry(Logger.logTrace);\n Logger.logInfo = Tracing.withOpenTelemetry(Logger.logInfo);\n Logger.logWarning = Tracing.withOpenTelemetry(Logger.logWarning);\n Logger.logError = Tracing.withOpenTelemetry(Logger.logError);\n }\n\n private static withOpenTelemetry(base: LogFunction, isError: boolean = false): LogFunction {\n return (category, message, metaData) => {\n try {\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.addEvent(message, { ...flattenObject(Logger.getMetaData(metaData)), error: isError });\n } catch (_e) { } // avoid throwing random errors (with stack trace mangled by async hooks) when openTelemetry collector doesn't work\n base(category, message, metaData);\n };\n }\n\n /** Set attributes on currently active openTelemetry span. Doesn't do anything if openTelemetry logging is not initialized.\n * @param attributes The attributes to set\n */\n public static setAttributes(attributes: SpanAttributes) {\n Tracing._openTelemetry?.trace.getSpan(Tracing._openTelemetry.context.active())?.setAttributes(attributes);\n }\n}\n"]}
@@ -1,37 +1,37 @@
1
- /** @packageDocumentation
2
- * @module Collections
3
- */
4
- /** A map similar to the standard JavaScript Map collection except that the keys must be a tuple
5
- * (javascript array), and two keys are considered equal if their elements in order are strict-equal,
6
- * and the tuples have the same amount of elements
7
- *
8
- * This means you can use array literals to key data in Maps that would otherwise be reference-compared
9
- * if using JavaScript's built in Map
10
- *
11
- * Note that JavaScript's Map type, unlike this one that uses strict equality, uses instead
12
- * SameValueZero equality comparison
13
- * @see https://262.ecma-international.org/6.0/#sec-samevaluezero
14
- *
15
- * ```js
16
- * const map = new TupleKeyedMap([[1,"y"], "value"]);
17
- * const value = map.get([1, "y"]); // a normal map would identify these keys as different because they are independent objects
18
- * ```
19
- *
20
- * It is implemented by each index of the tuple key being used as a singular key into a submap
21
- * @note this only implements a subset of the Map interface
22
- * @public
23
- */
24
- export declare class TupleKeyedMap<K extends readonly any[], V> {
25
- private _map;
26
- constructor(entries?: readonly (readonly [K, V])[] | null);
27
- clear(): void;
28
- private makeKeyError;
29
- get(key: K): V | undefined;
30
- has(key: K): boolean;
31
- set(key: K, value: V): this;
32
- [Symbol.iterator](): IterableIterator<[K, V]>;
33
- private _size;
34
- get size(): number;
35
- get [Symbol.toStringTag](): string;
36
- }
1
+ /** @packageDocumentation
2
+ * @module Collections
3
+ */
4
+ /** A map similar to the standard JavaScript Map collection except that the keys must be a tuple
5
+ * (javascript array), and two keys are considered equal if their elements in order are strict-equal,
6
+ * and the tuples have the same amount of elements
7
+ *
8
+ * This means you can use array literals to key data in Maps that would otherwise be reference-compared
9
+ * if using JavaScript's built in Map
10
+ *
11
+ * Note that JavaScript's Map type, unlike this one that uses strict equality, uses instead
12
+ * SameValueZero equality comparison
13
+ * @see https://262.ecma-international.org/6.0/#sec-samevaluezero
14
+ *
15
+ * ```js
16
+ * const map = new TupleKeyedMap([[1,"y"], "value"]);
17
+ * const value = map.get([1, "y"]); // a normal map would identify these keys as different because they are independent objects
18
+ * ```
19
+ *
20
+ * It is implemented by each index of the tuple key being used as a singular key into a submap
21
+ * @note this only implements a subset of the Map interface
22
+ * @public
23
+ */
24
+ export declare class TupleKeyedMap<K extends readonly any[], V> {
25
+ private _map;
26
+ constructor(entries?: readonly (readonly [K, V])[] | null);
27
+ clear(): void;
28
+ private makeKeyError;
29
+ get(key: K): V | undefined;
30
+ has(key: K): boolean;
31
+ set(key: K, value: V): this;
32
+ [Symbol.iterator](): IterableIterator<[K, V]>;
33
+ private _size;
34
+ get size(): number;
35
+ get [Symbol.toStringTag](): string;
36
+ }
37
37
  //# sourceMappingURL=TupleKeyedMap.d.ts.map