@itwin/core-bentley 3.5.0-dev.5 → 3.5.0-dev.8

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 (217) 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/TypedArrayBuilder.d.ts +97 -97
  92. package/lib/cjs/TypedArrayBuilder.js +134 -134
  93. package/lib/cjs/TypedArrayBuilder.js.map +1 -1
  94. package/lib/cjs/UnexpectedErrors.d.ts +43 -43
  95. package/lib/cjs/UnexpectedErrors.js +68 -68
  96. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  97. package/lib/cjs/UtilityTypes.d.ts +86 -86
  98. package/lib/cjs/UtilityTypes.js +26 -26
  99. package/lib/cjs/UtilityTypes.js.map +1 -1
  100. package/lib/cjs/YieldManager.d.ts +18 -18
  101. package/lib/cjs/YieldManager.js +34 -34
  102. package/lib/cjs/YieldManager.js.map +1 -1
  103. package/lib/cjs/core-bentley.d.ts +74 -74
  104. package/lib/cjs/core-bentley.js +90 -90
  105. package/lib/cjs/core-bentley.js.map +1 -1
  106. package/lib/cjs/partitionArray.d.ts +21 -21
  107. package/lib/cjs/partitionArray.js +43 -43
  108. package/lib/cjs/partitionArray.js.map +1 -1
  109. package/lib/esm/AccessToken.d.ts +8 -8
  110. package/lib/esm/AccessToken.js +8 -8
  111. package/lib/esm/AccessToken.js.map +1 -1
  112. package/lib/esm/Assert.d.ts +25 -25
  113. package/lib/esm/Assert.js +41 -41
  114. package/lib/esm/Assert.js.map +1 -1
  115. package/lib/esm/AsyncMutex.d.ts +26 -26
  116. package/lib/esm/AsyncMutex.js +39 -39
  117. package/lib/esm/AsyncMutex.js.map +1 -1
  118. package/lib/esm/BeEvent.d.ts +81 -81
  119. package/lib/esm/BeEvent.js +150 -150
  120. package/lib/esm/BeEvent.js.map +1 -1
  121. package/lib/esm/BeSQLite.d.ts +170 -170
  122. package/lib/esm/BeSQLite.js +180 -180
  123. package/lib/esm/BeSQLite.js.map +1 -1
  124. package/lib/esm/BentleyError.d.ts +376 -376
  125. package/lib/esm/BentleyError.js +695 -695
  126. package/lib/esm/BentleyError.js.map +1 -1
  127. package/lib/esm/BentleyLoggerCategory.d.ts +11 -11
  128. package/lib/esm/BentleyLoggerCategory.js +16 -16
  129. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  130. package/lib/esm/ByteStream.d.ts +92 -92
  131. package/lib/esm/ByteStream.js +129 -129
  132. package/lib/esm/ByteStream.js.map +1 -1
  133. package/lib/esm/ClassUtils.d.ts +14 -14
  134. package/lib/esm/ClassUtils.js +22 -22
  135. package/lib/esm/ClassUtils.js.map +1 -1
  136. package/lib/esm/Compare.d.ts +47 -47
  137. package/lib/esm/Compare.js +63 -63
  138. package/lib/esm/Compare.js.map +1 -1
  139. package/lib/esm/CompressedId64Set.d.ts +134 -134
  140. package/lib/esm/CompressedId64Set.js +423 -423
  141. package/lib/esm/CompressedId64Set.js.map +1 -1
  142. package/lib/esm/Dictionary.d.ts +125 -125
  143. package/lib/esm/Dictionary.js +199 -199
  144. package/lib/esm/Dictionary.js.map +1 -1
  145. package/lib/esm/Disposable.d.ts +80 -80
  146. package/lib/esm/Disposable.js +112 -112
  147. package/lib/esm/Disposable.js.map +1 -1
  148. package/lib/esm/Id.d.ts +277 -277
  149. package/lib/esm/Id.js +625 -625
  150. package/lib/esm/Id.js.map +1 -1
  151. package/lib/esm/IndexMap.d.ts +65 -65
  152. package/lib/esm/IndexMap.js +86 -86
  153. package/lib/esm/IndexMap.js.map +1 -1
  154. package/lib/esm/JsonSchema.d.ts +77 -77
  155. package/lib/esm/JsonSchema.js +8 -8
  156. package/lib/esm/JsonSchema.js.map +1 -1
  157. package/lib/esm/JsonUtils.d.ts +78 -78
  158. package/lib/esm/JsonUtils.js +148 -148
  159. package/lib/esm/JsonUtils.js.map +1 -1
  160. package/lib/esm/LRUMap.d.ts +129 -129
  161. package/lib/esm/LRUMap.js +326 -326
  162. package/lib/esm/LRUMap.js.map +1 -1
  163. package/lib/esm/Logger.d.ts +141 -141
  164. package/lib/esm/Logger.js +249 -249
  165. package/lib/esm/Logger.js.map +1 -1
  166. package/lib/esm/ObservableSet.d.ts +23 -23
  167. package/lib/esm/ObservableSet.js +47 -47
  168. package/lib/esm/ObservableSet.js.map +1 -1
  169. package/lib/esm/OneAtATimeAction.d.ts +31 -31
  170. package/lib/esm/OneAtATimeAction.js +89 -89
  171. package/lib/esm/OneAtATimeAction.js.map +1 -1
  172. package/lib/esm/OrderedId64Iterable.d.ts +74 -74
  173. package/lib/esm/OrderedId64Iterable.js +232 -232
  174. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  175. package/lib/esm/OrderedSet.d.ts +40 -40
  176. package/lib/esm/OrderedSet.js +59 -59
  177. package/lib/esm/OrderedSet.js.map +1 -1
  178. package/lib/esm/PriorityQueue.d.ts +70 -70
  179. package/lib/esm/PriorityQueue.js +136 -136
  180. package/lib/esm/PriorityQueue.js.map +1 -1
  181. package/lib/esm/ProcessDetector.d.ts +59 -59
  182. package/lib/esm/ProcessDetector.js +67 -67
  183. package/lib/esm/ProcessDetector.js.map +1 -1
  184. package/lib/esm/SortedArray.d.ts +232 -232
  185. package/lib/esm/SortedArray.js +296 -296
  186. package/lib/esm/SortedArray.js.map +1 -1
  187. package/lib/esm/StatusCategory.d.ts +30 -30
  188. package/lib/esm/StatusCategory.js +454 -454
  189. package/lib/esm/StatusCategory.js.map +1 -1
  190. package/lib/esm/StringUtils.d.ts +22 -22
  191. package/lib/esm/StringUtils.js +142 -142
  192. package/lib/esm/StringUtils.js.map +1 -1
  193. package/lib/esm/Time.d.ts +122 -122
  194. package/lib/esm/Time.js +146 -146
  195. package/lib/esm/Time.js.map +1 -1
  196. package/lib/esm/Tracing.d.ts +40 -40
  197. package/lib/esm/Tracing.js +126 -126
  198. package/lib/esm/Tracing.js.map +1 -1
  199. package/lib/esm/TypedArrayBuilder.d.ts +97 -97
  200. package/lib/esm/TypedArrayBuilder.js +127 -127
  201. package/lib/esm/TypedArrayBuilder.js.map +1 -1
  202. package/lib/esm/UnexpectedErrors.d.ts +43 -43
  203. package/lib/esm/UnexpectedErrors.js +64 -64
  204. package/lib/esm/UnexpectedErrors.js.map +1 -1
  205. package/lib/esm/UtilityTypes.d.ts +86 -86
  206. package/lib/esm/UtilityTypes.js +21 -21
  207. package/lib/esm/UtilityTypes.js.map +1 -1
  208. package/lib/esm/YieldManager.d.ts +18 -18
  209. package/lib/esm/YieldManager.js +30 -30
  210. package/lib/esm/YieldManager.js.map +1 -1
  211. package/lib/esm/core-bentley.d.ts +74 -74
  212. package/lib/esm/core-bentley.js +78 -78
  213. package/lib/esm/core-bentley.js.map +1 -1
  214. package/lib/esm/partitionArray.d.ts +21 -21
  215. package/lib/esm/partitionArray.js +39 -39
  216. package/lib/esm/partitionArray.js.map +1 -1
  217. package/package.json +3 -3
@@ -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":["/*---------------------------------------------------------------------------------------------\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
+ {"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,98 +1,98 @@
1
- /** @packageDocumentation
2
- * @module Collections
3
- */
4
- import { Constructor } from "./UtilityTypes";
5
- /** Options used to construct a [[TypedArrayBuilder]].
6
- * @public
7
- */
8
- export interface TypedArrayBuilderOptions {
9
- /** Controls how much additional memory is allocated when the TypedArray needs to be resized to accomodate more elements.
10
- * [[TypedArrayBuilder.ensureCapacity]] multiplies the required capacity by this factor to determine the new capacity.
11
- * Default: 1.5
12
- * Minimum: 1.0, which causes the TypedArray to allocate exactly the space it needs each time it is resized.
13
- */
14
- growthFactor?: number;
15
- /** The number of elements to allocate memory for in the TypedArray when creating the builder.
16
- * If you know the minimum number of elements you intend to add to the builder, you should specify that as the
17
- * initial capacity to avoid reallocations when populating the array.
18
- * Default: 0.
19
- * Minimum: 0.
20
- */
21
- initialCapacity?: number;
22
- }
23
- /** Incrementally builds a [TypedArray] of unsigned 8-, 16-, or 32-bit integers.
24
- * Sometimes you wish to populate a `TypedArray`, but you don't know how many elements you will need.
25
- * `TypedArray` requires you to specify the size upon construction, and does not permit you to change the size later.
26
- *
27
- * `TypedArrayBuilder` manages a `TypedArray`, permitting you to [[push]] and [[append]] elements to it. It exposes two "size" properties":
28
- * - [[capacity]], the number of elements it has currently allocated space for - i.e., the length of the underlying TypedArray; and
29
- * - [[length]], the number of elements that have so far been added to it, which is never bigger than [[capacity]].
30
- * When [[capacity]] is exceeded, a new, bigger TypedArray is allocated and the contents of the previous array are copied over to it.
31
- *
32
- * Once you've finished adding elements, you can obtain the finished `TypedArray` via [[toTypedArray]].
33
- * @see [[Uint8ArrayBuilder]], [[Uint16ArrayBuilder]], and [[Uint32ArrayBuilder]] to build specific types of arrays.
34
- * @public
35
- */
36
- export declare class TypedArrayBuilder<T extends Uint8Array | Uint16Array | Uint32Array> {
37
- /** The constructor for the specific type of array being populated. */
38
- protected readonly _constructor: Constructor<T>;
39
- /** The underlying typed array, to be reallocated and copied when its capacity is exceeded. */
40
- protected _data: T;
41
- /** The number of elements added to the array so far. */
42
- protected _length: number;
43
- /** Multiplier applied to required capacity by [[ensureCapacity]]. */
44
- readonly growthFactor: number;
45
- /** Constructs a new builder from the specified options, with a [[length]] of zero. */
46
- protected constructor(constructor: Constructor<T>, options?: TypedArrayBuilderOptions);
47
- /** The number of elements currently in the array. */
48
- get length(): number;
49
- /** The number of elements that can fit into the memory currently allocated for the array. */
50
- get capacity(): number;
51
- /** Like [TypedArray.at](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/at),
52
- * returns the element at the specified index, with negative integers counting back from the end of the array.
53
- * @note It is your responsibility to ensure the index falls within the bounds of the array.
54
- */
55
- at(index: number): number;
56
- /** Ensure that [[capacity]] is at least equal to `newCapacity`.
57
- * This is used internally by methods like [[push]] and [[append]] to ensure the array has room for the element(s) to be added.
58
- * It can also be useful when you know you intend to add some number of additional elements, to minimize reallocations.
59
- *
60
- * If `newCapacity` is not greater than the current [[capacity]], this function does nothing.
61
- * Otherwise, it allocates a new `TypedArray` with room for `newCapacity * growthFactor` elements, and copies the contents of the previous `TypedArray` into it.
62
- * [[length]] remains unchanged; [[capacity]] reflects the size of the new TypeArray.
63
- */
64
- ensureCapacity(newCapacity: number): number;
65
- /** Append the specified value, resizing if necessary. */
66
- push(value: number): void;
67
- /** Append an array of values, resizing (at most once) if necessary. */
68
- append(values: T): void;
69
- /** Obtain the finished array.
70
- * @param includeUnusedCapacity If true, the length of the returned array will be equal to [[capacity]], with extra bytes initialized to zero; otherwise, the
71
- * returned array's length will be equal to [[length]].
72
- */
73
- toTypedArray(includeUnusedCapacity?: boolean): T;
74
- }
75
- /** A [[TypedArrayBuilder]] for producing a [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
76
- * @public
77
- */
78
- export declare class Uint8ArrayBuilder extends TypedArrayBuilder<Uint8Array> {
79
- /** @see [[TypedArrayBuilder]] constructor. */
80
- constructor(options?: TypedArrayBuilderOptions);
81
- }
82
- /** A [[TypedArrayBuilder]] for producing a [Uint16Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array).
83
- * @public
84
- */
85
- export declare class Uint16ArrayBuilder extends TypedArrayBuilder<Uint16Array> {
86
- /** @see [[TypedArrayBuilder]] constructor. */
87
- constructor(options?: TypedArrayBuilderOptions);
88
- }
89
- /** A [[TypedArrayBuilder]] for producing a [Uint32Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array).
90
- * @public
91
- */
92
- export declare class Uint32ArrayBuilder extends TypedArrayBuilder<Uint32Array> {
93
- /** @see [[TypedArrayBuilder]] constructor. */
94
- constructor(options?: TypedArrayBuilderOptions);
95
- /** Obtain a view of the finished array as an array of bytes. */
96
- toUint8Array(includeUnusedCapacity?: boolean): Uint8Array;
97
- }
1
+ /** @packageDocumentation
2
+ * @module Collections
3
+ */
4
+ import { Constructor } from "./UtilityTypes";
5
+ /** Options used to construct a [[TypedArrayBuilder]].
6
+ * @public
7
+ */
8
+ export interface TypedArrayBuilderOptions {
9
+ /** Controls how much additional memory is allocated when the TypedArray needs to be resized to accomodate more elements.
10
+ * [[TypedArrayBuilder.ensureCapacity]] multiplies the required capacity by this factor to determine the new capacity.
11
+ * Default: 1.5
12
+ * Minimum: 1.0, which causes the TypedArray to allocate exactly the space it needs each time it is resized.
13
+ */
14
+ growthFactor?: number;
15
+ /** The number of elements to allocate memory for in the TypedArray when creating the builder.
16
+ * If you know the minimum number of elements you intend to add to the builder, you should specify that as the
17
+ * initial capacity to avoid reallocations when populating the array.
18
+ * Default: 0.
19
+ * Minimum: 0.
20
+ */
21
+ initialCapacity?: number;
22
+ }
23
+ /** Incrementally builds a [TypedArray] of unsigned 8-, 16-, or 32-bit integers.
24
+ * Sometimes you wish to populate a `TypedArray`, but you don't know how many elements you will need.
25
+ * `TypedArray` requires you to specify the size upon construction, and does not permit you to change the size later.
26
+ *
27
+ * `TypedArrayBuilder` manages a `TypedArray`, permitting you to [[push]] and [[append]] elements to it. It exposes two "size" properties":
28
+ * - [[capacity]], the number of elements it has currently allocated space for - i.e., the length of the underlying TypedArray; and
29
+ * - [[length]], the number of elements that have so far been added to it, which is never bigger than [[capacity]].
30
+ * When [[capacity]] is exceeded, a new, bigger TypedArray is allocated and the contents of the previous array are copied over to it.
31
+ *
32
+ * Once you've finished adding elements, you can obtain the finished `TypedArray` via [[toTypedArray]].
33
+ * @see [[Uint8ArrayBuilder]], [[Uint16ArrayBuilder]], and [[Uint32ArrayBuilder]] to build specific types of arrays.
34
+ * @public
35
+ */
36
+ export declare class TypedArrayBuilder<T extends Uint8Array | Uint16Array | Uint32Array> {
37
+ /** The constructor for the specific type of array being populated. */
38
+ protected readonly _constructor: Constructor<T>;
39
+ /** The underlying typed array, to be reallocated and copied when its capacity is exceeded. */
40
+ protected _data: T;
41
+ /** The number of elements added to the array so far. */
42
+ protected _length: number;
43
+ /** Multiplier applied to required capacity by [[ensureCapacity]]. */
44
+ readonly growthFactor: number;
45
+ /** Constructs a new builder from the specified options, with a [[length]] of zero. */
46
+ protected constructor(constructor: Constructor<T>, options?: TypedArrayBuilderOptions);
47
+ /** The number of elements currently in the array. */
48
+ get length(): number;
49
+ /** The number of elements that can fit into the memory currently allocated for the array. */
50
+ get capacity(): number;
51
+ /** Like [TypedArray.at](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray/at),
52
+ * returns the element at the specified index, with negative integers counting back from the end of the array.
53
+ * @note It is your responsibility to ensure the index falls within the bounds of the array.
54
+ */
55
+ at(index: number): number;
56
+ /** Ensure that [[capacity]] is at least equal to `newCapacity`.
57
+ * This is used internally by methods like [[push]] and [[append]] to ensure the array has room for the element(s) to be added.
58
+ * It can also be useful when you know you intend to add some number of additional elements, to minimize reallocations.
59
+ *
60
+ * If `newCapacity` is not greater than the current [[capacity]], this function does nothing.
61
+ * Otherwise, it allocates a new `TypedArray` with room for `newCapacity * growthFactor` elements, and copies the contents of the previous `TypedArray` into it.
62
+ * [[length]] remains unchanged; [[capacity]] reflects the size of the new TypeArray.
63
+ */
64
+ ensureCapacity(newCapacity: number): number;
65
+ /** Append the specified value, resizing if necessary. */
66
+ push(value: number): void;
67
+ /** Append an array of values, resizing (at most once) if necessary. */
68
+ append(values: T): void;
69
+ /** Obtain the finished array.
70
+ * @param includeUnusedCapacity If true, the length of the returned array will be equal to [[capacity]], with extra bytes initialized to zero; otherwise, the
71
+ * returned array's length will be equal to [[length]].
72
+ */
73
+ toTypedArray(includeUnusedCapacity?: boolean): T;
74
+ }
75
+ /** A [[TypedArrayBuilder]] for producing a [Uint8Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array).
76
+ * @public
77
+ */
78
+ export declare class Uint8ArrayBuilder extends TypedArrayBuilder<Uint8Array> {
79
+ /** @see [[TypedArrayBuilder]] constructor. */
80
+ constructor(options?: TypedArrayBuilderOptions);
81
+ }
82
+ /** A [[TypedArrayBuilder]] for producing a [Uint16Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint16Array).
83
+ * @public
84
+ */
85
+ export declare class Uint16ArrayBuilder extends TypedArrayBuilder<Uint16Array> {
86
+ /** @see [[TypedArrayBuilder]] constructor. */
87
+ constructor(options?: TypedArrayBuilderOptions);
88
+ }
89
+ /** A [[TypedArrayBuilder]] for producing a [Uint32Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint32Array).
90
+ * @public
91
+ */
92
+ export declare class Uint32ArrayBuilder extends TypedArrayBuilder<Uint32Array> {
93
+ /** @see [[TypedArrayBuilder]] constructor. */
94
+ constructor(options?: TypedArrayBuilderOptions);
95
+ /** Obtain a view of the finished array as an array of bytes. */
96
+ toUint8Array(includeUnusedCapacity?: boolean): Uint8Array;
97
+ }
98
98
  //# sourceMappingURL=TypedArrayBuilder.d.ts.map